书上代码示例:

 1 package com.learnJava.test;
 2 
 3 /**
 4  * @Author zhuchangli
 5  * @Date 2019/9/14
 6  **/
 7 class Game{
 8     Game(int i){
 9         System.out.println("Game constructor");
10     }
11 }
12 
13 class BoardGame extends Game{
14     BoardGame(int i){
15         super(i);
16         System.out.println("BoardGame constructor");
17     }
18 }
19 public class Chess extends BoardGame{
20     Chess(){
21         super(11);
22         System.out.println("Chess constructor");
23     }
24 
25     public static void main(String [] args){
26         Chess x = new Chess();
27     }
28 }

结论:如果不在BoardGame() 中调用基类构造器,编译器将抱怨无法找到符合Game() 形式的构造器。

练习6:用Chess.java 来证明前一段话。

注释掉:BoardGame 类中的super(i) 即可证明。

练习7:(1)修改练习5,使A和B以带参数的构造器取代默认构造器,为C写一个构造器,并在其中执行所有的初始化。

我的答案:

package com.learnJava.test;

/**
 * @Author zhuchangli
 * @Date 2019/9/14
 **/

class ArtA{
    ArtA(int i){
        System.out.println("A constructor");
    }
}

class ArtB extends ArtA{
    ArtB(int i){
        super(i);
        System.out.println("B constructor");
    }
}

public class CartoonC extends ArtB{
    CartoonC(int i){
        super(i);
        System.out.println("C constructor");
    }
    public static void main(String [] args){
        //ArtB b  = new ArtB(10);
        CartoonC c = new CartoonC(10);
    }

}

参考答案:

 1 package com.learnJava.test;
 2 
 3 /**
 4  * @Author zhuchangli
 5  * @Date 2019/9/14
 6  **/
 7 class A7{
 8     A7(char c,int i){
 9         System.out.println("A7(char,int)");
10     }
11 }
12 
13 class B7 extends A7{
14     B7(String d,float j){
15         super(' ',10);
16         System.out.println("B7(String,j)");
17     }
18 }
19 
20 public class C7 extends A7{
21     private char c;
22     private int j;
23     C7(char a,int i){
24         super(a,i);
25         c = a;
26         j = i;
27     }
28 
29     B7 b7 = new B7("hi",0.7f);
30     public static void main(String [] args){
31         C7 c7 = new C7('a',100);
32     }
33 }

我未知的是:可以在 C7类中 定义B7 类和 初始化。而C7类和B7类都是继承的是 A7。

练习8:(1)创建一个基类,它仅有一个非默认的构造器;再创建一个导出类,它带有默认构造器和非默认构造器。在导出类的构造器中调用基类构造器。

参考答案:

 1 package com.learnJava.test;
 2 
 3 /**
 4  * @Author zhuchangli
 5  * @Date 2019/9/14
 6  **/
 7 
 8 class A8{
 9     private char a;
10     private int i ;
11     A8(char c,int j){
12          a = c;
13          i = j;
14          System.out.println("A8(char,int)");
15     }
16 }
17 
18 public class C8 extends A8{
19     private char ch;
20     private int k;
21     C8(){
22        super('z', 0);
23         System.out.println("C8()");
24     }
25     C8(char a,int i){
26         super(a,i);
27         ch = a;
28         k = i;
29         System.out.println("C8(char,int)");
30     }
31 
32     public static void main(String [] args){
33         C8 c8 = new C8();
34         C8 c81 = new C8('a',100);
35     }
36 }

未知点:在C8(),默认构造方法中不知道该如何调用基类方法。

 posted on 2019-09-14 23:16  岂曰-无衣  阅读(210)  评论(0编辑  收藏  举报