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 || 点返回首页

原文地址:https://www.cnblogs.com/aeon/p/9967199.html