公共 onCreate() 还是受保护的 onCreate()?

Posted

技术标签:

【中文标题】公共 onCreate() 还是受保护的 onCreate()?【英文标题】:public onCreate(), or protected onCreate()? 【发布时间】:2012-09-09 18:44:33 【问题描述】:

在阅读“Hello, android”一书时,我注意到:

每个带有onCreate(Bundle savedInstanceState) 方法的java文件,都有 protected 访问修饰符 EXCEPT 在程序的主 Activity [具有:public void onCreate(Bundle savedInstanceState)]。

为什么onCreate方法public在程序的主Activity上,而protected在其他地方?

【问题讨论】:

您可以在所有活动中使用 public 访问修饰符...... 你能告诉我们那个程序做了什么吗? 这是一个数独程序,如前所述,所有具有 onCreate 方法的类 - 除了在主要活动中 - 都具有“受保护的 void onCreate(Bundle savedInstanceState)”。为什么??我不敢相信没有特殊原因!! 【参考方案1】:

也可以是protected。没有什么重要或明智的。

【讨论】:

【参考方案2】:

您可以更改方法的可见性。你不能做的是:降低可见性(将公共方法设为私有),访问私有方法(将其设为公开)

【讨论】:

【参考方案3】:

onCeate() 受到保护,以避免从活动对象中调用它。

MyActivity activity = new MyActivity();
activity.onCreate(args);  // which doesn't make sense because activity is not yet created

由于此方法仅在活动创建时调用,因此您自己调用它很可能会给您一个 nullpointerException,因为活动尚未创建。 S/O Post

【讨论】:

【参考方案4】:

没有理由公开该方法(但这样做不会影响任何事情)。无论如何,您不应该手动调用它。

顺便说一下,Intellij IDEA 有带有公共onCreate 的活动模板。这可能是该方法在书中公开的原因。

【讨论】:

以上是关于公共 onCreate() 还是受保护的 onCreate()?的主要内容,如果未能解决你的问题,请参考以下文章

什么是访问说明符?我应该以私有、受保护还是公共继承?

继承公共/受保护/私有构造函数

公共/受保护/私有继承的问题

为啥继承的受保护运算符=()具有公共访问权限

如何在 Mockery 中为受保护的属性存根公共设置方法

公共与受保护