Java 为什么findViewByID可以在没有超级关键字的情况下调用
我不熟悉java和android编程。据我所知,Java 为什么findViewByID可以在没有超级关键字的情况下调用,java,android,Java,Android,我不熟悉java和android编程。据我所知,findViewById是在父类上定义的,我只是好奇为什么findViewById方法可以在子类中调用而不使用super关键字。而不重写子类中的findViewById方法,super和this在活动类的范围内是等效的 您可以执行this.findViewById(),或ActivityName.this.findViewById(),但这是多余的,除非在匿名类中(即您应该使用ActivityName.this,但这超出了问题的范围) 要问的相关问
findViewById
是在父类上定义的,我只是好奇为什么findViewById
方法可以在子类中调用而不使用super
关键字。而不重写子类中的findViewById
方法,super
和this
在活动类的范围内是等效的
您可以执行this.findViewById()
,或ActivityName.this.findViewById()
,但这是多余的,除非在匿名类中(即您应该使用ActivityName.this
,但这超出了问题的范围)
要问的相关问题:为什么
setContentView
不需要super
?super
关键字指的是超类
(父类)实现,所以当您调用super.findViewById(…)
时,您正在访问超类
方法实现,因为你的子类
没有覆盖这个方法super.findViewById(…)
和findViewById(…)
是等效的
但如果你覆盖它,它将产生不同。
以下是一个例子:
class MyActivity extends Activity{
void onCreate(....){
View fromParentView = super.findViewById(...);
View fromThisView = findViewById(...);
}
View findViewById(int resId){
throw new IllegalArgumentException();
}
}
来自父视图的第一个将正常工作,但来自此视图的将引发异常
请检查在什么情况下,您认为super
引用有帮助?如果您在当前类中重写了实现,则仅当您要调用父类中的实现时,才需要使用super。如果您没有覆盖,那么super.findViewById()
和findViewById()
是等效的。>>但是,您试图找到的视图在这个类中,而不是在超类中,父类实现工作得很好,所以不需要覆盖,依我看。。。。。我认为这一行是不相关的,this
和super
是不等价的,this
通常指当前上下文,因此如果您在匿名类(如View.OnClickListener)中,this
将表示OnClickListener
而不是活动