我们今天在计算机科学讲座中讨论了继承,并讨论了从其他类访问方法。我的一位同学问子子类如何访问最高父类方法,我的教授也对此感到好奇,并提出了如下建议:
super.super.toString();
也许可以工作,但事实并非如此。出于好奇,我试图自己解决这个问题,并想出了这个:
public class A {
public static void main(String[] args){
B b = new B();
C c = new C();
System.out.println(b.toString());
System.out.println(c.toString());
}
public String toString(){
return "Class A";
}
}
class B extends A {
public String toString(){
return "Class B";
}
}
class C extends B {
public String toString(){
return A.class.toString();
}
}
现在,在测试各种东西时,我偶然发现了这一点:(这一切都将在 C 类中完成)
super.toString();
似乎做同样的事情:
B.class.toString();
我的问题是两者之间有什么区别,还是完全相同?同样在我上面的代码中,这是从子子类调用方法的正确方法吗?
最佳答案
不,它们不是同一件事。假设您调用super.toString()
来自你的类(class)C
,这会调用 toString()
上B
,这将返回“B 类”。
当您调用A.class.toString()
时或B.class.toString()
您根本没有调用任何父类(super class)方法,您正在调用 toString
上Class
.
关于java - 继承,从子类调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15165790/