JAVA如果子类继承父类后,重定义父类的方法了,其他类在调用该方法时是重定义的方法,还是父类的原方法

如题所述

直接用肯定是重定义的方法。
但是貌似可以用super.XXX(),调用父类方法,应该是,你可以试下。追问

还是你试吧,我编译器都删半年了

追答

...晕 那你问这个做什么,难道还要我全套帮你做完?

追问

既然你不知道我就不问你了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-04
肯定是子类重新定义的。要调用父类的方法需要用到super关键字。追问

那是不是父类的那个方法还存在啊

追答

是的.

第2个回答  2012-09-04
通过javap反编译文件后,可以看到,当子类继承父类时,编译器会自动将父类中非private的方法转移到子类中,所以当重写父类的方法后,实际上是覆盖了原方法,所以在调用该方法的时候是调用的重新定义的方法!追问

那父类的那个原方法还存在吗

追答

父类的方法是会被覆盖了的,所以你可以理解为原方法不存在了。但是父类中的属性不会随继承转移到子类中,需要根据声明时类型来决定访问的是父类的变量还是子类的变量。
例如,
class A{
int a = 10;
}
class B extends A{
int a = 20;
}
public class Test16 {
public static void main(String[] args){
A a1 = new B();
System.out.println(a1.a);
B b1 = new B();
System.out.println(b1.a);
}
}

会输出结果10,,20。
如果你想访问父类中的方法,可以在子类中通过super关键字来访问。

追问

public class Test {

}
class A {
public void print(String name) {
System.out.println(name);
}
}
class B extends A {
SUPER.print("aaa");
}

这么调用对不

追答

当然不对
class A{
int a = 10;
public void ad(){
System.out.println("a");
}
}
class B extends A{
int a = 20;
public void ad(){
System.out.println("b");
}
public void c(){
super.ad();
}
}

追问

你这不是重构了一次吗才调用的结果是应该是b吧,不重构直接用

追答

嗯,你那样写是对的!不过我怎么记得你刚开始问的时候是A.print()。。。

第3个回答  2012-09-04
重新定义的
第4个回答  2012-09-04
重定义的
第5个回答  2012-09-05
重定义的
相似回答