zoukankan      html  css  js  c++  java
  • 继承之super关键字的使用

    一、super关键字:

    在对象的内部使用,可代表父类对象。

    1.
    访问父类的属性:super.age

    2.
    访问父类的方法:super.eat()

    例:

    package 关键字extends;
    
    public class Dog extends Animal{
        int age=20;
        public void eat(){
            System.out.println("狗具有吃东西的能力!");
        }
        public Dog(){
            System.out.println("子类执行了!");
        }
        public void method(){
            System.out.println(super.age);//访问父类的属性
            super.eat();                  //访问父类的方法
            System.out.println(age);      //访问父类的属性    
            eat();                        //访问子类方法
        }
    }
    

    结果:

    父类执行了!
    子类执行了!
    40
    动物具有吃东西的能力!
    20
    狗具有吃东西的能力!

    二、

    子类的构造过程当中必须调用父类的构造方法

    创建子类对象的时候,会自动执行父类构造方法,并创建父类对象。此时就隐式的使用了super关键子。

    super关键字显示的写出来:

    package 关键字extends;
    
    public class Dog extends Animal{
        int age=20;
        public Dog(){
            super();                  //super关键字   
            System.out.println("子类执行了!");
        }
    }
    主函数中:
            Dog dog=new Dog();//创建子类对象
            //dog.method();
    父类执行了!
    子类执行了!

    super关键字隐识表达:

    public class Dog extends Animal{
        int age=20;
        public Dog(){
            //super();             //这里注释掉super关键字   
            System.out.println("子类执行了!");
        }
    }
    主函数中:
            Dog dog=new Dog();
            //dog.method();

    结果:

    父类执行了!
    子类执行了!

    三、
    如果子类的构造方法当中没有显示调用父类的构造方法,则系统会默认调用
    父类无参的构造方法

    如果要显示的调用构造方法,则super关键字必须放在子类的构造方法的第一行

    这里写图片描述

    四、
    如果子类的构造方法中既没有显示的调用父类的构造方法,
    而父类又没有无参的构造方法,则编译出错

    也就是说父类有有参的构造方法,子类的无参构造函数就会报错!!!

    如何修改:

    1.使用显示调用父类的构造函数并传入参数值;

        public Dog(){
            super(3);     //子类显示调用并传入参数
            System.out.println("子类执行了!");
    
        }

    2.在父类中在添加一个无参的构造方法

        public Animal(){         //无参的构造方法
            System.out.println("父类执行了!");
        }
            public Animal(int age){  //有参的构造方法
            this.age=age;
        }

    五、总结
    子类的构造过程当中必须调用父类的构造方法。

    如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用父类无参的构造方法。

    如果显示调用父类的构造方法则必须放在子类构造方法的第一行。

    如果子类的构造方法中既没有显示的调用父类的构造方法,而父类中又没有无参的构造方法,则编译出错!!

  • 相关阅读:
    Python基础:数据类型-列表与元组(6)
    Python基础:数据类型-数字(5)
    Python基础:编码规范(4)
    Python基础:语法基础(3)
    Python基础:第一个Python程序(2)
    Python基础:搭建开发环境(1)
    Vue.js 2.x笔记:服务请求axios(8)
    Vue.js 2.x笔记:状态管理Vuex(7)
    一位资深传统型软件开发者的思考:传统软件企业危机四伏【转】
    基于cesium的GIS洪水淹没三维模拟系统
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10454071.html
Copyright © 2011-2022 走看看