zoukankan      html  css  js  c++  java
  • 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 || 点返回首页

  • 相关阅读:
    快乐的一天从AC开始 | 20210717 | 牛客小白月赛36J
    快乐的一天从AC开始 | 20210717 | P4839
    P7295-[USACO21JAN]Paint by Letters P【平面图欧拉公式】
    泛型
    List集合
    红黑树被定义
    单例模式的双重检查锁模式为什么必须加 volatile?
    什么是 happens-before 规则?
    解决AtomicInteger 在高并发下性能问题
    什么是指令重排序?为什么要重排序?
  • 原文地址:https://www.cnblogs.com/aeon/p/9967199.html
Copyright © 2011-2022 走看看