• Java中的关键字super


    /**
     * 关于关键字super
     * 1.super是一个关键字,全部小写
     *    super与this对比着学习
     *    this:
     *       - 能出现在实例方法和构造方法中
     *       - 语法结构是:"this."、和"this()"
     *       - this不能使用在静态方法中
     *       - this.大多数情况下可以省略(在区分实例变量和局部变量时不可以省略。比如set方法中和构造方法中)
     *       - this() 只能出现在构造方法的第一行,通过当前的构造方法去调用"本类中"其他的构造方法,目的是:代码复用
     *    super:
     *       - 能出现在实例方法和构造方法中
     *       - 语法结构是:"super."、和"super()"
     *       - super不能使用在静态方法中
     *       - super.大多数情况下可以省略
     *       - super.什么时候不能省略呢?
     *              父类和子类中有同名属性,或有同样的方法,想在子类中访问父类的该属性或方法,super.不能省略.
     *       - super() 只能出现在构造方法的第一行,通过当前的构造方法去调用"父类中"其他的构造方法,
     *                 目的是:创建子类对象的时候,先初始化父类型特征(并不是创建独立的对象)。
     *       - 重要结论:当一个构造方法第一行既没有this(),也没有super(),默认会有一个super();表示通过当前子类的构造方法
     *         调用父类的无参构造方法,所以必须要保证父类的无参构造方法是存在的。
     *       - this()和super()不能共存,因为他们都需要出现在构造方法的第一行
     *       - 创建子类对象时,无论如何 父类中的构造方法(无参构造或有参构造)总有一个会被执行。
     *       - java语言中不管是new什么对象,老祖宗object类的无参是构造方法一定会执行(object类的无参是构造方法处于"栈顶部")。
     *             栈顶部的特点是:最后调用,但最先执行结束(后进先出原则)
     *       - super 不是引用,它也不保存某个对象的内存地址,所以它也不指向任何对象,它只是代表当前对象内部的那一块父类型特征。
     *       * super的使用:
     *              super.属性名      [访问当前对象父类的属性]
     *              super.方法名()    [访问当前对象父类的方法]
     *              super()           [调用父类的构造方法]
     */
    
    /**
     * 判断以下代码指向顺序
     */
    public class SuperText {
        public static void main(String[] args) {
            new Z();
        }
    }
    class X{
        public X() {    //父类的这个构造方法最后被调用,最先执行
            //在此构造方法的第一行默认有一行代码没有this();也没有super();就默认存在super();存在,它会调用Object的无参构造
            //Object类的无参构造最后被调用,最先被执行(栈的特点:后入先出)
            System.out.print("1 ");
        }
    }
    class Y extends X{
        public Y() {
            System.out.print("2 ");
        }
        public Y(String name){
            super();
            System.out.print("3 ");
        }
    }
    class Z extends Y{
        public Z(){
            this("张三");
            System.out.print("4 ");
        }
        public Z(String name){
            this(name,18);
            System.out.print("5 ");
        }
        public Z(String name,int age){
            super(name);
            System.out.print("6 ");
        }
    }
    /*
    程序运行结果:
        1 3 6 5 4
     */
  • 相关阅读:
    过滤器、监听器、拦截器的区别,你都搞懂了吗?
    如何实现一键全选
    【服务器使用】vscode & winscp进行服务器容器连接(含修改初始密码)
    什么是数据仓库?
    pom管理规范
    websocket加鉴权 @ServerEndpoint方式
    【Linux】深刻理解进程概念、进程状态、进程常用指令和系统调用
    python工具-c-struct-decode
    【GlobalMapper精品教程】012:WGS84转2000地理坐标系与平面坐标系
    「动态规划dp」
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/128004420