2019.10.21课堂总结

一、动手试验1

 

 TestInherits.java代码如下:

 1 package HomeTest;
 2 
 3 class Grandparent {
 4     public Grandparent(){
 5           System.out.println("GrandParent Created.");    
 6 }
 7     public Grandparent(String string) {
 8             System.out.println("GrandParent Created.String:" + string);    
 9  }
10 }
11 class Parent2 extends Grandparent{
12     public Parent2(){
13             super("Hello.Grandparent.");
14             System.out.println("Parent Created");
15        // super("Hello.Grandparent.");
16       }
17 }
18 class Child2 extends Parent2 {
19     public Child2()  {
20         System.out.println("Child Created");
21       }
22 }
23 
24 public class TestInherits {
25     public static void main(String args[]) {
26             Child2 c = new Child2();
27   }
28 }
View Code

运行结果:

 

 结论:

(1)子类的构造方法在运行之前,必须调用父类的构造方法;

(2)通过 super 调用基类构造方法,必须是子类构造方法中的第一个语句。

 

 

思索:为什么子类的构造方法在运行之前,必须调用父类的构造方法?能不能反过来?为什么不能反过来?

结论:

        因为子类继承了父类的属性和方法,要想初始化子类的对象,则需要父类的属性和方法,所以需要先构造父类的属性和方法,所以要调用父类的构造方法,然后再构造自己在父类的基础上增加的属性和方法。

 

二、探索技术的奥秘

 

 

反编译结果:

 

 经查看源码后得出结论:

前面示例中,main方法实际上调用的是: public void println(Object x),这一方法内部调用了String类的valueOf方法。

valueOf方法内部又调用Object.toString方法:

public String toString(){

return getClass().getName() +"@" + Integer.toHexString(hashCode());

}

hashCode方法是本地方法,由JVM设计者实现: public native int hashCode();

 

 

三、方法覆盖

 

 

 编写的代码:

 1 package HomeTest;
 2 
 3 public class override {
 4     public static void main(String[] args) {
 5         BBB b = new BBB();
 6         b.f1();
 7         b.f2();
 8     }
 9 }
10 
11 class AAA {
12     public void f1() {
13         System.out.println("A run!");
14     }
15 }
16 
17 class BBB extends AAA {
18     public void f1() {
19         System.out.println("B run!");
20     }
21 
22     public void f2() {
23         super.f1();
24     }
25 }
View Code

结果如下:

 

 

 

四、在实践中理解把握复杂的知识

 

 

 

 运行结果:

 

 

五、接口多态

 

 

 1 package HomeTest;
 2 
 3 public class TestDuotai {
 4 
 5     public static void main(String[] args) {
 6         Feeder feeder = new Feeder();
 7         feeder.feed(new lion());
 8         feeder.feed(new cat_1());
 9     }
10 }
11 
12 class Feeder {
13 
14     public void feed(Animal m) {
15         m.eat();
16     }
17 }
18 
19 interface Animal {
20     public void eat();
21 }
22 
23 class lion implements Animal {
24     public void eat() {
25         System.out.println("狮子要吃肉!");
26     }
27 }
28 
29 class cat_1 implements Animal {
30     public void eat() {
31         System.out.println("猫咪爱吃鱼!");
32     }
33 }
View Code

运行结果:

posted @ 2019-10-24 15:13  嘉禾旧木  阅读(104)  评论(0编辑  收藏  举报