代码改变世界

子类与父类之间的调用关系

2011-04-09 18:00  Rollen Holt  阅读(1911)  评论(0编辑  收藏  举报
1 1,现在有下面这个程序:
2
3 class Base {
4 public Base() {
5 System.out.println("Base");
6 }
7 }
8
9 public class In extends Base {
10 public static void main(String argv[]){
11 In in=new In();
12 }
13 }
14
15 输出结果:Base
16
17 2,如果把Base类的构造函数改成一个普通的类的话,如下:
18
19 class Base {
20 public void Base() {
21 System.out.println("Base");
22 }
23 }
24
25 public class In extends Base {
26 public static void main(String argv[]){
27 In in=new In();
28 }
29 }
30
31 则无任何输出,因为此时Base类和In类默认的构造函数都是空。
32
33 3,继续下一步修改:
34
35 class Base {
36 public Base() {
37 System.out.println("Base");
38 }
39 }
40
41 public class In extends Base {
42 public In() {}
43 public static void main(String argv[]){
44 In in=new In();
45 }
46 }
47
48 如果父类的构造函数不作改动,而把子类的构造函数显式的定义为空,则输出为:Base
49
50 即使不显式的super()调用父类的构造函数,父类的构造函数一直都会被默认执行?
51
52 如果写成public In() {super();}输出依然是:Base
53
54 4,下一个试验:
55
56 class Base {
57 public void Base() {
58 System.out.println("Base");
59 }
60 }
61
62 public class In extends Base {
63 public static void main(String argv[]){
64 System.out.println(99);
65 In in=new In();
66 }
67 }
68
69 此时输出为:99
70
71 5,继续:
72
73 class Base {
74 public void Base() {
75 System.out.println("Base");
76 }
77 }
78
79 public class In extends Base {
80 public static void main(String argv[]){
81 In in=new In();
82 //显式调用Base()有输出,可见加了返回类型后,
83 //Base()是一个普通的方法,不再是构造方法了
84 in.Base();
85 }
86 }
87
88 此时输出为:Base
89
90 这步很好理解,就是子类调用父类的公共方法。