• 041_面向对象_14_继承_super


    一、super()方法

      super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
      除了Object类之外其他所有类的构造方法第一句总是super(…)
    二、super()的应用场景(重点)

      a)在普通方法中(非构造器)中的任何位置可以通过super(...)调用直接父类的构造方法、调完之后会在内存中生成父类的对象。  

      b)在任何类的构造方法中,若是构造方法的第一行代码没有显式的调用super(...);那么Java默认都会调用super(); 所以你这里的super(); 加不加都无所谓。super()必须位于构造方法第一行

      c)我们知道构造方法可以重载,所以一个构造方法的方法名对应N个重载的构造方法,调用时通过super(参数列表)来确定调用的是那一个构造方法。

    三、演示示例  

    package edu.aeon.test;
    /**
     * [说明]:动物类
     * @author aeon
     *
     */
    public class Animal /* extends Object */ {
        String eye;
    
        public void run() {
            System.out.println("跑跑!");
        }
    
        public void eat() {
            System.out.println("吃吃!");
        }
    
        public void sleep() {
            System.out.println("zzzzz");
        }
    
        public Animal() {
            super();
            System.out.println("创建一个动物!");
        }
    
    }
    
    class Mammal extends Animal {
    
        public void taisheng() {
            System.out.println("我是胎生");
        }
    
    }
    
    class Bird extends Animal {
        public void run() {
            super.run();
            System.out.println("我是一个小小小小鸟,飞呀飞不高");
        }
    
        public void eggSheng() {
            System.out.println("卵生");
        }
    
        public Bird() {
            super();
            System.out.println("建一个鸟对象");
        }
    }
    package edu.aeon.test;
    /**
     * [说明]:测试继承及super()
     * @author Administrator
     *
     */
    public class TestExtends {
    
        public static void main(String[] args) {
              Bird b = new Bird();
                b.run();
        }
    
    }

    运行结果截图:

    为了便于理解、我们画了一个本示例在内存中的结构图:

      

      从这个图中可以看出,继承关系在内存中是包裹结构。

      比如:当bird对象调用toString时、首先看当前类中有没有toString这个方法,如果没有去它的直接父类,如果直接父类没有在去直接父类的直接父类,这样依次到Object类,如果Object类没有,则抛出异常:The method xxx() is undefined for the type xxx类、但是在集成开发环境中可以避免这种异常的发生,因为在集成开发环境中这种异常为编译时异常。这是基本的思路。

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    TestStand ​自​定义​步骤​类型​开发​最佳​实践【2】
    TestStand ​用户​界面​开发​最佳​实践【3】
    Log4net
    Visual Studio 常用技巧
    LIN 总线
    C# Socket
    TestStand​ 代码​模​块​开发​最佳​实践【1】
    TestStand 基本知识[10]--在序列中调用代码模块之--LabVIEW
    TestStand 基本知识[9]--Step Properties
    C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!
  • 原文地址:https://www.cnblogs.com/aeon/p/9967199.html
Copyright © 2020-2023  润新知