• Java 面向对象编程之继承的super关键词


    java 继承里面的super关键词

    super关键词

    • 一个引用变量,用于引用父类对象
    • 父类和子类都具有相同的命名属性,要调用父类中的属性时使用
    • super也是父类的构造函数,格式super(参数)
      • 注意点,调用super()必须是类构造函数中的第一个语句,否则编译不通过
    • 注意
      • 每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错
    public class Father {
     public Father(){
     System.out.println("father ⽆参构造函数");
     }
    }
    public class Children extends Father{
     public Children(){
     //默认存在,写和不写都⾏
     super();
     System.out.println("Child⽆参构造函数");
     }
    }
    • this()和super()都指的是对象,均不可以在static环境中使用
      • 包括:static变量,static方法,static代码块
    • 构造函数super和this
      • this和super在构造函数中只能有一个,且都必须是构造函数当中的第一行
      • 当父类的构造函数是无参构造函数时,在子类的构造函数中,不用显式super()去调用父类的构造函数
      • 当父类的构造函数是有参构造函数时,如果子类的构造函数中不写super()进行调用父类的构造函数,编译器会报错

    Java继承后类的初始化顺序

      问题:静态代码块、非静态代码块、父类/子类无参构造函数、父类/子类的一般方法

    class Teacher {
        static {
            System.out.println("Teacher 静态代码块");
        }
        public Teacher() {
            System.out.println("Teacher 无参构造函数被执行");
        }
        public Teacher(int age) {
            System.out.println("Teacher 有参构造函数被执行");
        }
        public void sleep() {
            System.out.println("Teacher中的sleep被调用");
        }
    }
    
    
    public class Student extends Teacher{
        static {
            System.out.println("Student 静态代码块");
        }
        public Student() {
            super();
            System.out.println("Student 无参构造被执行");
            super.sleep();
        }
        public void sleep() {
            System.out.println("Student中的sleep被调用");
        }
    }
    
        public static void main(String[] args) {
            new Student().sleep();
        }

    作者:陈彦斌

    个性签名:没有学不会的技术,只有不学习的人!
    联系方式:543210188(WeChat/QQ),推荐WeChat
  • 相关阅读:
    百度指数感想
    冲刺贡献分
    冲刺三
    通过myEclipse创建hibernate的实体类
    并发处理
    数据库设计原则(转载)
    Extjs学习
    关于oracle存储过程需要注意的问题
    oracle存储过程
    十大编程算法
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13377491.html
Copyright © 2020-2023  润新知