zoukankan      html  css  js  c++  java
  • 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调用时,可以访问到父类被子类重写的方法。

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

  • 相关阅读:
    HBase权威指南
    Mapreduce编程
    Hive内部表和外部表的区别
    Android Volley全然解析(四),带你从源代码的角度理解Volley
    codeforces 448CPainting Fence
    2.maven 安装配置
    cocos2d-x 3.0正式版创建project笔记
    C. DZY Loves Sequences
    spring 基础回想 tips01
    spring 配置属性细节
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854445.html
Copyright © 2011-2022 走看看