java - 子类继承父类方法的问题
本文介绍了java - 子类继承父类方法的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
class Sup {
int a = 9;
public void printA(){
System.out.println(a);
}
}
class Sub extends Sup{
int a = 90;
public static void main(String[] args){
Sub s = new Sub();
s.printA(); // 9
}
}
我一开始的理解是这样的,当对象调用非静态方法的时候会隐式传递一个 this, 所以 s.printA() 就传递了一个 this, printA 方法相当于
public void printA(){
System.out.println(this.a);
}
这了this引用的对象应该是 s ,也就是子类对象,输出应该是 90。 为何会是 9呢?
解决方案
上几张图
这个是Sub
子类的class文件,根据字节码显示(注意看我圈圈的部分),这里调用的是父类的printA
方法(Sup.printA
)。这个很好理解,因为Sub
类作为子类继承了父类Sup
,自然会拥有父类的public
的方法。
Sub
类的main
方法中调用的是父类的printA
方法
这个是父类的class文件,同样请注意圈圈的部分,printA
调用的a
变量是父类的变量(Sup.a
),所以说打印的是9
这篇关于java - 子类继承父类方法的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文