Java中super关键字详解

 更新时间:2022年02月27日 17:00:54   作者:洛语言  
这篇文章主要为大家详细介绍了Java中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.name
		System.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类中的无参构造一定会执行,并且是处于栈顶(最后被调用,但是最先执行结束,后进先出)。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!     

相关文章

  • Springboot项目如何使用apollo配置中心

    Springboot项目如何使用apollo配置中心

    这篇文章主要介绍了Springboot项目如何使用apollo配置中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • SpringBoot多模块项目框架搭建过程解析

    SpringBoot多模块项目框架搭建过程解析

    这篇文章主要介绍了SpringBoot多模块项目框架搭建过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • SpringBoot从繁至简的框架基础教程

    SpringBoot从繁至简的框架基础教程

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置
    2022-10-10
  • MyBatis配置与CRUD超详细讲解

    MyBatis配置与CRUD超详细讲解

    这篇文章主要介绍了MyBatis配置与CRUD,CRUD是指在做计算处理时的增加(Create)、读取(Read)、更新(Update)和删除(Delete)几个单词的首字母简写。CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能
    2023-02-02
  • Java封装统一的Result Model案例

    Java封装统一的Result Model案例

    这篇文章主要介绍了Java封装统一的Result Model案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • Java API学习教程之正则表达式详解

    Java API学习教程之正则表达式详解

    正则表达式的强大众所周知,它令程序员的头痛程度也数一数二的。下面这篇文章主要给大家介绍了关于Java API学习教程之正则表达式的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Java中队列Queue和Deque的区别与代码实例

    Java中队列Queue和Deque的区别与代码实例

    学过数据结构的,一定对队列不陌生,java也实现了队列,下面这篇文章主要给大家介绍了关于Java中队列Queue和Deque区别的相关资料,需要的朋友可以参考下
    2021-08-08
  • JAVA位运算的知识点总结

    JAVA位运算的知识点总结

    在本篇文章里小编给大家整理的是关于JAVA有关位运算的全套梳理,需要的朋友们可以参考学习下。
    2020-03-03
  • Spring boot热部署devtools过程解析

    Spring boot热部署devtools过程解析

    这篇文章主要介绍了Spring boot热部署devtools过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • java 基本算法之归并排序实例代码

    java 基本算法之归并排序实例代码

    这篇文章主要介绍了java 基本算法之归并排序实例代码的相关资料,需要的朋友可以参考下
    2017-05-05

最新评论