zoukankan      html  css  js  c++  java
  • 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

    运行结果:

  • 相关阅读:
    hibernate联合主键 注解方式
    使用Json出现java.lang.NoClassDefFoundError解决方法
    Spring 定时任务2
    Spring 定时任务1
    Javasocket1
    volatile
    Java中byte与16进制字符串的互相转换
    Spring 源码学习
    web服务器工作原理
    SpringMVC国际化
  • 原文地址:https://www.cnblogs.com/best-hym/p/11732343.html
Copyright © 2011-2022 走看看