隐藏的super()(续)
我们再来看看下面这个例子。
ShadowTest.java
ShadowTest.java
1
public class ShadowTest
2
{
3
public static void main(String [] args)
4
{
5
A a = new A();
6
B b = new B();
7
System.out.println("a.i= "+a.i);
8
System.out.println("b.i= "+b.i);
9
}
10
}
A.java
public class ShadowTest2
{3
public static void main(String [] args)4
{5
A a = new A();6
B b = new B();7
System.out.println("a.i= "+a.i);8
System.out.println("b.i= "+b.i);9
}10
}1
class A
2
{
3
int i = 10;
4
5
public A()
6
{
7
System.out.println(i);
8
}
9
}
B.java
class A2
{3
int i = 10;4
5
public A()6
{7
System.out.println(i);8
}9
}1
class B extends A
2
{
3
int i = 5;
4
5
public B()
6
{
7
System.out.println(i);
8
}
9
}
class B extends A2
{3
int i = 5;4
5
public B()6
{7
System.out.println(i);8
}9
}
为什么会出现两个10的结果?就是因为B类继承了A类,在B类的构造函数B(){}中隐藏了super();的原因。那么它会调用父类A的构造函数。
参考:《Java2全方位学习》第137-138页


浙公网安备 33010602011771号