我就遇到了这个例子将网上的遗产,我关于它的结果是不容易的。我错过了一些关键的东西。继承在Java中
public class A {
int i = 5;
public A() {
foo();
}
private void foo() {
System.out.println(i);
}}
public class B extends A {
int i = 6;}
public class C extends B {
int i = 7;
public void foo() {
System.out.println("C's foo");
System.out.println(super.i);
}}
我试图弄清是怎么通过以下命令发生的事情:C c = new C(); System.out.println(C.i);
我知道,当我们创建的C
一个新实例我们接近A和B的constructures,所以我们达到A()
- (问题1)i
(A)正在初始化吗? 现在我们需要调用foo()
- (问题2) - 请问C'S foo()
考虑为A的foo()
的重写?如果B有自己的foo()
会怎么样?那么它被认为是一个覆盖和C的foo()
被操作?
据我所知,没有覆盖,当它涉及到局部变量。 System.out.println(c.i)
怎么是7而不是5?难道不应该是最高父亲的i
?
编辑:我的问题是不是该Foo和当我使用C I将被使用,大约是在这两个特定的命令会发生什么,造成明显的使用A的foo和不是C的。
非常感谢。
Hi jon。通过这两个命令程序打印:5 7. 为什么它首先打印5? – Numerator
@Nir:构造函数调用到'foo()'打印A.i,这是5. –
为什么C的foo()没有被调用?因为A的foo()是私人的? – Numerator