Java中super关键字详解

  • super有什么用?
  • super什么时候不可以省略呢?
  • super在内存图中是如何存在的呢?
  • super使用时的注意事项

super有什么用?

(1)当子类中构造方法第一行没有super时,会默认第一行有一个super(),它的作用是调用父类的无参构造。
例:

class A{public A(){System.out.println("父类构造方法执行!");}
}public class superTest extends A{public superTest(){//这里会有一个默认的super(),会调用父类的无参构造。System.out.println("子类构造方法执行!");}public static void main(String[] args){superTest s = new superTest();}
}

执行结果如下:

(2)如果想要调用父类中的有参构造,可以在子类构造方法第一行加super(形式参数列表),这里的形式参数列表与父类中想要调用的有参构造的形式参数列表相对应。
例:

class A{//无参构造public A(){System.out.println("父类无参构造方法执行!");}//有参构造public A(int a){System.out.println("父类有参构造方法执行!");}
}public class superTest extends A{public superTest(){super(100);System.out.println("子类构造方法执行!");}public static void main(String[] args){superTest s = new superTest();}
}

执行结果如下:

(3)子类中可以通过super.xxx的方式,调用父类型特征(实例变量);通过==super.xxx()==的方式,调用父类型方法(实例方法)。

class A{String name;public A(String name){this.name = name;}
}public class superTest extends A{public superTest(String name){super(name);}public void shopping(){System.out.println(super.name + "正在购物!");}public static void main(String[] args){superTest s = new superTest("张三");s.shopping();}
}

运行结果如下:

super什么时候不可以省略呢?

super和this很相似,很多时候都可以省略。Java中允许子类中出现和父类一样的同名变量,如果想在子类中访问父类中的同名特征,那么super就不能省略。

class A{String name;public A(){name = "张三";}
}public class superTest extends A{String name;public superTest(){name = "李四";}public void dosome(){System.out.println(this.name + "dosome !");//系统会自动将 name 看作 this.nameSystem.out.println(name + "dosome !");System.out.println(super.name + "dosome !");}public static void main(String[] args){superTest s = new superTest();s.dosome();}
}

运行结果如下:

super在内存图中是如何存在的呢?

以上面的代码为例,画出了大概的内存图,如下:

super使用时的注意事项

(1)super()表示通过子类的构造方法调用父类的构造方法。
模拟现实中这种场景:想要有儿子,必须先有父亲。
(2)当一个构造方法第一行:
既没有this(),又没有super()的话,会默认会有一个super();
表示通过当前子类构造方法调用父类的无参数构造方法。
所以必须保证父类的无参数构造方法是存在的。
(3)this()和super()不能共存,都是只能出现在构造方法第一行。
(4)父类的构造方法是一定会执行的。
(5)在Java语言中,无论new什么对象,Object类中的无参构造一定会执行,并且是处于栈顶(最后被调用,但是最先执行结束,后进先出)。

Java中super关键字详解相关推荐

  1. java中new关键字详解

    java中new关键字详解 在java中我们可以经常使用new来创建一个对象,但是这对于初学者来说可能只会使用却不能理解new关键字和它的语法 new关键字的语法 注意使用前先导包,一般我们使用ide ...

  2. Java中 this关键字详解

    this关键字是Java中常用的关键字,可以用于任何实例方法内指向当前对象,也可以指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用. 在Java中,当一个对象创建后,Java虚拟机(JVM ...

  3. Java中violate关键字详解(2)?真正了解violate

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  4. Java中violate关键字详解

    一.Java内存模型 想要理解volatile为什么能确保可见性,就要先理解Java中的内存模型是什么样的. Java内存模型规定了所有的变量都存储在主内存中.每条线程中还有自己的工作内存,线程的工作 ...

  5. Java 中 final 关键字详解

    在 Java 中,final 关键字可以修饰的东西比较多,很容易混淆,在这里记录一下.主要从功能上说明一下,不做过多的代码演示. final 关键字用途 1. final 变量 凡是对成员变量或者本地 ...

  6. Java中Volatile关键字详解

    https://www.cnblogs.com/zhengbin/p/5654805.html 转载于:https://www.cnblogs.com/wangjing666/p/11301500.h ...

  7. Java中JDBC连接数据库详解

    今天动力节点java学院小编分享的是JDBC连接数据库的相关知识,希望通过看过此文,各位小伙伴对DBC连接数据库有所了解,下面就跟随小编一起来看看JDBC连接数据库的知识吧. 一.JDBC连接数据库概 ...

  8. JAVA中的Random详解

    JAVA中的Random详解 首先,在JDK自带的常用的random中有两个,这俩都是产生随机数的,不过一个是util下的random,另外一个是Math下的.我们分别介绍一下 util中的rando ...

  9. Java中super关键字及super()的使用

    Java中super关键字及super()的使用: 1.super的使用: (1)super是一个关键字. (2)super和this很类似,我们对比着学习. 2.先复习一下this关键字的使用. ( ...

最新文章

  1. 我的编码习惯 —— API 接口定义
  2. oracle易忘函数用法(5)
  3. springboot环境搭建及入门必知
  4. Docker部署运行微服务
  5. Java 8 Friday:Java 8将彻底改变数据库访问
  6. php laravel 返回统一格式,封装的统一的Laravel响应类,返回数据类
  7. php删除excel文件,PHPExcel:HTML到Excel,写入删除excel文件中的CSS
  8. 大数据之-Hadoop伪分布式_NameNode格式化注意事项---大数据之hadoop工作笔记0025
  9. 区块链教育平台Metisedu将于4月推出beta版本
  10. 第一百八十四节,jQuery-UI,验证注册表单
  11. 程序员们如何破局 5G?
  12. 光声光谱技术和激光、红外技术的优劣势对比
  13. svm python 模型绘图_1SVM处理数据并绘图
  14. Unity3D数字孪生开发笔记——软件基础篇
  15. PHP PYTHON RUBY PERL
  16. Windows下db2数据库许可证过期解决方法
  17. smarty-wap端
  18. 关于语音特征提取(MFCC)的matlab相关函数
  19. 02百万架构师核心技术设计实践
  20. 智慧园区地图导航解决方案,如何实现园区内地图导航?

热门文章

  1. ubuntu18.04 安装ceres,g2o,以及cmake升级
  2. Python爬取《权力的游戏第八季》演员数据并分析
  3. 公众号基本配置(token验证失败)|公众平台测试账号接口配置信息(token验证失败)
  4. RNA 31. SCI文章临床蛋白质组肿瘤在线数据挖掘神器(CPTAC)
  5. setDaemon方法
  6. 关于春节的那些事(HTML的标签和链接)
  7. mysql 返回 pair_【原创】MySQL Proxy中socketpair的使用
  8. 多线程中Thread的join方法
  9. 【leetcode】把数字翻译成字符串 c++
  10. HTTP缓存机制与CDN