​ 之前一直认为,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调用时,可以访问到父类被子类重写的方法。

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

java基础篇 之 super关键字的理解的更多相关文章

  1. java基础学习总结——super关键字

    一.super关键字

  2. java基础篇 之 final关键字

    ​ final,字面上是最终的意思,通常来说,我们用它来作为修饰符的时候,都是代表"这是无法改变的"的意思.不想改变可能出与两种理由:设计或效率.由于这两个原因相差甚远,所以我们在 ...

  3. 小白—职场之Java基础篇

    java基础篇 java基础 目录 1.java是一种什么语言,jdk,jre,jvm三者的区别 2.java 1.5之后的三大版本 3.java跨平台及其原理 4.java 语言的特点 5.什么是字 ...

  4. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  5. 金三银四跳槽季,BAT美团滴滴java面试大纲(带答案版)之一:Java基础篇

    Java基础篇: 题记:本系列文章,会尽量模拟面试现场对话情景, 用口语而非书面语 ,采用问答形式来展现.另外每一个问题都附上“延伸”,这部分内容是帮助小伙伴们更深的理解一些底层细节的补充,在面试中可 ...

  6. Java基础-this和super的区别

    package com.cn.This; /** * this与super的区别: * 1.this相当于指向本类的对象的指针,调用本类的另一种类型的构造方法 * 2.super调用的是父类中形参相同 ...

  7. java基础篇---I/O技术(三)

    接上一篇java基础篇---I/O技术(二) Java对象的序列化和反序列化 什么叫对象的序列化和反序列化 要想完成对象的输入或输出,还必须依靠对象输出流(ObjectOutputStream)和对象 ...

  8. java基础篇 之 构造器内部的多态行为

    java基础篇 之 构造器内部的多态行为 ​ 我们来看下下面这段代码: public class Main { public static void main(String[] args) { new ...

  9. java基础篇1

    JAVA基础篇1 注释 单行注释 //这是一个单行注释,由两个斜杠组成,不能嵌套多行注释 多行注释 /*这是一个 多行注释 ,//里面不能嵌套多行注释, 但是可以嵌套单行注释*/ 文档注释 /**ja ...

随机推荐

  1. search(5)- elastic4s-构建索引

    按照计划,这篇开始尝试用elastic4s来做一系列索引管理和搜索操作示范.前面提过,elastic4s的主要功能之一是通过组合Dsl语句形成json请求.那么我们先试试组合一些Dsl语句,再想办法产 ...

  2. 利用opencv实现视频捕捉功能

    import cv2 as cv import numpy as np def video_demo(): capture = cv.VideoCapture(0) #打开摄像头,参数0代表设备ID( ...

  3. PHP安全(文件包含、变量覆盖、代码执行)

    文件包含漏洞 本地文件包含 截断技巧: ../../etc/passwd%00(\x00 \0) 利用操作系统对目录最大长度的限制,可以不需要0字节而达到截断的目的.目录字符串,在windows下25 ...

  4. 性能测试-pidstat 问题定位分析

    pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu.内存.线程.设备IO等系统资源的占用情况.pidstat首次运行时显示自系统启动开始的各项统计信息, ...

  5. 史上最详细的VM虚拟机安装Kali-linux教程(以2020.1版本为例,含下载地址+默认提升为root权限)

    一.官方下载 Kali Linux 官方网址:www.Kali.org下载方式分两种:http 下载和 bt 下载(由于是国外网站 http 方式下载会非常慢),选择对应版本点击即可下载. 二.创建新 ...

  6. 用多线程,实现并发,TCP

    首先,开启新的线程,是不会新开辟内存空间的,即,子线程和主线程 都在同一个进程里,也就是主进程里,用os.pid(),os.ppid() 服务器: 方式一:Thread实例化 def task(con ...

  7. 小白初学Java的一点点收获

    作为刚刚学习Java没有几天的小白,我想把我在学习过程中,所学习到的知识和注意事项和大家一起分享分享.在这个过程中,希望大家可以有所收获,有什么不对的地方,希望大家指出并且私信我. 首先说说第一次记事 ...

  8. 如何保证kafka消息不丢失

    背景 这里的kafka值得是broker,broker消息丢失的边界需要对齐一下: 1 已经提交的消息 2 有限度的持久化 如果消息没提交成功,并不是broke丢失了消息: 有限度的持久化(broke ...

  9. JDK11的重要新特性

    文章目录 JDK11发布啦 Oracle不再提供JRE和Server JRE下载 删除部署工具 JavaFX不再包含在JDK中 删除Java EE和CORBA模块 JDK11发布啦 JDK11 在20 ...

  10. KVM 一键批量创建虚拟机

    目录 一.原理 二.基础镜像 2.1.创建基础镜像 2.2. 完善基础镜像 2.3.基础镜像设置权限 3.4 设置 title 3.5.基础镜像XML 三.批量创建机器脚本 四.挂载磁盘多种方式 4. ...