Java 为什么findViewByID可以在没有超级关键字的情况下调用

Java 为什么findViewByID可以在没有超级关键字的情况下调用,java,android,Java,Android,我不熟悉java和android编程。据我所知,findViewById是在父类上定义的,我只是好奇为什么findViewById方法可以在子类中调用而不使用super关键字。而不重写子类中的findViewById方法,super和this在活动类的范围内是等效的 您可以执行this.findViewById(),或ActivityName.this.findViewById(),但这是多余的,除非在匿名类中(即您应该使用ActivityName.this,但这超出了问题的范围) 要问的相关问

我不熟悉java和android编程。据我所知,
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
而不是
活动