Java中super关键字详解

简介: Java中super关键字详解


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类中的无参构造一定会执行,并且是处于栈顶(最后被调用,但是最先执行结束,后进先出)。


相关文章
|
2月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
146 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
26天前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
50 9
|
26天前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
48 8
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
44 4
|
2月前
|
Java 程序员
在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。
【10月更文挑战第13天】在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。本文介绍了Java关键字的基本概念及其重要性,并通过定义类和对象、控制流程、访问修饰符等示例,展示了关键字的实际应用。掌握这些关键字,是成为优秀Java程序员的基础。
25 3
|
2月前
|
算法 Java
在Java编程中,关键字和保留字是基础且重要的组成部分,正确理解和使用它们
【10月更文挑战第13天】在Java编程中,关键字和保留字是基础且重要的组成部分。正确理解和使用它们,如class、int、for、while等,不仅能够避免语法错误,还能提升代码的可读性和执行效率。本指南将通过解答常见问题,帮助你掌握Java关键字的正确使用方法,以及如何避免误用保留字,使你的代码更加高效流畅。
36 3
|
2月前
|
存储 安全 Java
了解final关键字在Java并发编程领域的作用吗?
在Java并发编程中,`final`关键字不仅用于修饰变量、方法和类,还在多线程环境中确保对象状态的可见性和不变性。本文深入探讨了`final`关键字的作用,特别是其在final域重排序规则中的应用,以及如何防止对象的“部分创建”问题,确保线程安全。通过具体示例,文章详细解析了final域的写入和读取操作的重排序规则,以及这些规则在不同处理器上的实现差异。
了解final关键字在Java并发编程领域的作用吗?
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
27 5
|
2月前
|
Java 开发者
在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选
【10月更文挑战第6天】在 Java 多线程编程中,Lock 接口正逐渐取代传统的 `synchronized` 关键字,成为高手们的首选。相比 `synchronized`,Lock 提供了更灵活强大的线程同步机制,包括可中断等待、超时等待、重入锁及读写锁等高级特性,极大提升了多线程应用的性能和可靠性。通过示例对比,可以看出 Lock 接口通过 `lock()` 和 `unlock()` 明确管理锁的获取和释放,避免死锁风险,并支持公平锁选择和条件变量,使其在高并发场景下更具优势。掌握 Lock 接口将助力开发者构建更高效、可靠的多线程应用。
26 2
|
3月前
|
缓存 安全 Java
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)
Java的特点和优点,、Java 8的新特性、面向对象、基本数据类型和引用类型、自动拆装箱与自动装箱、==与equals()的区别、为什么重写equals()就要重写hashcode()、抽象类和接口的区别、重载和重写的区别、四种引用方式、wt()和sleep()的区别、java方法是值传递还是引用传递?访问修饰符、static、final、this和super、volatile的用法及原理
【Java面试题汇总】Java基础篇——基础、修饰符和关键字(2023版)