• java基础篇 之 super关键字的理解


    ​ 之前一直认为,super指向的是父类对象。到今天,仔细查询了资料,自己做了实验,确认这个结论是不对的。我们分一下几个点讨论下:

    super的作用:
    第一种:用来访问父类被隐藏的成员变量
    第二种:用来调用父类中被重载的方法
    第三种:用来调用父类的构造函数
    super真的指向父类对象吗?
    1. 代码直接分析:
    public class Super {
        public void test() {
            System.out.println("super test 执行了");
        }
    }
    
    public class Sub extends Super {
        @Override
        public void test() {
            super.test();
            System.out.println("Sub test执行了");
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Sub sub = new Sub();
            sub.test();
        }
    }
    

    我们直接断点调试,可以发现:

    在这里插入图片描述

    这里的super明明就是指向的一个Sub对象,也就是子类对象

    1. 我们也可以从理论上分析,如果我们的父类是一个抽象类呢?在这种情况下,super可能指向一个抽象类对象吗?
    2. 综合上面两点,super指向父类对象,很明显是个错误的说法,那么正确的到底是什么的?

    这就要结合我们开篇就说过的,super的作用来说明一下了,我这里只说说我的看法,仅供大家参考:

    我觉得,super跟this都是指向的同一个对象,比如上面的sub对象,这个sub既有自己的方法,也有从父类中继承而来的方法,但是对于super跟this不同的是(这里主要指子类复写父类方法,跟子父类中有同名属性),如果通过super调用,那么对于这个复写的方法而言,父类中的方法的优先级会大于子类,所以,通过super调用时,可以访问到父类被子类重写的方法。

    以上是我自己的理解,仅供参考,有不对的地方欢迎指出~

  • 相关阅读:
    moco-globalsettings
    moco-简述
    stub和mock
    软件测试工作经验分享
    类、对象、方法、属性和实例变量
    你真的对 parseInt有足够的了解吗?
    PhoneGap开发环境搭建(记录一下,仅仅针对Android)
    360 前端面试题
    前端WEB开发工程师面试题-基础部分
    有意思的For循环
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854445.html
Copyright © 2020-2023  润新知