如何在Java中实现继承?例如,考虑一下:
class A {
public void foo() {
System.out.print("A");
}
}
class B extends A {
...
}
class Test {
public static void main(String[] args) {
B test = new B();
test.foo(); // how is foo() called?
}
在这一行之下,编译器会将A.foo()的定义转储到B类的主体中吗?喜欢
class B extends A {
...
public void foo() {
System.out.print("A");
}
}
或者foo以某种方式在A级中查找并在那里打电话?
答案 0 :(得分:3)
这可能对你有所帮助,Ivor Horton编写的Java 7开头的解释
我在本章开头说过派生类扩展了一个基类。这不仅仅是行话 - 它 真的这样做。正如我已多次说过,继承是关于基类成员的 可以在派生类中访问,而不是派生类对象中存在的基类成员。一个对象 子类包含原始基类的所有成员,以及您定义的任何新成员 在派生类中。如图6-3所示。
答案 1 :(得分:2)
方法体不会复制到子类的未定义方法体中。相反,当你打电话
B test = new B();
test.foo();
它将通过其层次结构看起来,每次无法找到实现时上升到一个级别。
首先,它将检查没有实现的B
。比A
高一级,所以它会使用那个。