隐藏的super()(续)
我们再来看看下面这个例子。
ShadowTest.java
ShadowTest.java
1public 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.java2{
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}
1class A
2{
3 int i = 10;
4
5 public A()
6 {
7 System.out.println(i);
8 }
9}
B.java2{
3 int i = 10;
4
5 public A()
6 {
7 System.out.println(i);
8 }
9}
1class B extends A
2{
3 int i = 5;
4
5 public B()
6 {
7 System.out.println(i);
8 }
9}
2{
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页