当前位置: 技术问答>java相关
提一个java继承方面的问题
来源: 互联网 发布时间:2015-02-04
本文导语: 下面是源代码 //test.java class Super { public void methodA() { System.out.println("Super::methodA"); } public void methodB() { methodA(); //大家注意这里 System.out.println("Super::methodB ...
下面是源代码
//test.java
class Super {
public void methodA() {
System.out.println("Super::methodA");
}
public void methodB() {
methodA(); //大家注意这里
System.out.println("Super::methodB call Super::methodA");
}
}
class SubClass extends Super {
public void methodA() {
System.out.println("SubClass::methodA");
}
public void methodB() {
super.methodB();
System.out.println("SubClass::methodB call Super::methodA");
}
}
public class Test
{
public static void main(String[] args) {
Super a = new Super();
SubClass b = new SubClass();
a.methodB();
b.methodB();
}
}
运行后生成的结果是:
Super::methodA
Super::methodB call Super::methodA
SubClass::methodA (在这里是否不应该调用子类的methodA??????????)
Super::methodB call Super::methodA
SubClass::methodB call Super::methodA
//test.java
class Super {
public void methodA() {
System.out.println("Super::methodA");
}
public void methodB() {
methodA(); //大家注意这里
System.out.println("Super::methodB call Super::methodA");
}
}
class SubClass extends Super {
public void methodA() {
System.out.println("SubClass::methodA");
}
public void methodB() {
super.methodB();
System.out.println("SubClass::methodB call Super::methodA");
}
}
public class Test
{
public static void main(String[] args) {
Super a = new Super();
SubClass b = new SubClass();
a.methodB();
b.methodB();
}
}
运行后生成的结果是:
Super::methodA
Super::methodB call Super::methodA
SubClass::methodA (在这里是否不应该调用子类的methodA??????????)
Super::methodB call Super::methodA
SubClass::methodB call Super::methodA
|
你把我搞胡涂了,你是想说应该调用Super::methodA而不应该调用SubClass::methodA是吗?
原因是Java 中一切方法缺省都等同于C++中的virtual函数,这种调用方法正是C++中virtual的原意呀,就是可以不用管实际类型是什么,只要用基类指针去引用方法,就会自动调用适当的子类中的相同方法。
原因是Java 中一切方法缺省都等同于C++中的virtual函数,这种调用方法正是C++中virtual的原意呀,就是可以不用管实际类型是什么,只要用基类指针去引用方法,就会自动调用适当的子类中的相同方法。
|
继承的原则是如果子类中重写父类方法,父类方法就会被屏蔽掉!除非显示调用 如 super.method(),你在子类中重写了methodA(),虽然,你显示调用父类的methodB()但没有 显示调用父类的methodA(), 子类的methodA()还会屏蔽掉父类的methodA().在执行super.metnodB()应执行的时子类的methodA().这只是我的想法,如有不对请指出!!~