Java关键字super

简介: Java关键字super

Java关键字super

@[toc]


基本理解
  • 在Java类中使用super来调用父类中的指定操作
  1. super可用于访问父类中定义的属性
  2. super可用于调用父类中定义的成员方法
  3. super可用于在子类构造器中调用父类的构造器
  • 注意
  1. 尤其当子父类出现同名成员时,可以用super表明调用的是父类中的成员
  2. super的追溯不仅限于直接父类
  3. super和this的用法相像,this代表本类对象的引用,super代表父类的内存空间的标识
super的使用

可以在子类的方法或构造器中,通过使用”super.属性“或者”super.方法“的方式。显示的调用父类中声明的属性或方法,但是,通常情况下我们都习惯省略“super.”


特殊情况:(属性)

  • 当子类和父类中定义了同名的属性时,我们要想在子类中调用父类的属性,则必须显式的使用”super.属性“的方式表面调用的是父类中声明的属性(但是通常开发中不会出现这种情况)

例如:

父类定义了属性id,但是子类又定义了id,如代码所示(代码是Person的子类,父类中定义了一个id)

package superGJZ;

public class Student extends Person {
    String major;
    int id=100;//学号
    public Student(){
    }
    public Student(String major){
        this.major=major;
    }
    public void eat() {
        System.out.println("Student类对Person类eat方法的重写");
    }
    public void study(){
        System.out.println("Student类自己的study方法");
    }
    //super
    public void show(){
        System.out.println("name="+name+",age="+age);
        System.out.println("id="+id+"id="+super.id);//第一个id其实是this.id,this被省略了的
    }
}
  • 特殊情况(方法)

当子类重写了父类的方法以后,想要在子类的方法中调用父类被重写的方法时,必须显式的使用”super.方法“的方式表面调用的是父类的方法

调用父类的构造器
  1. 可以在子类的构造器中显式的使用”super(形参列表)“的方式,调用父类中声明的构造器
  2. ”super(形参列表)“的使用,必须声明在子类构造器的首行
  3. 我们在类的构造器中,针对”this(形参列表)“或”super(形参列表)“只能二选一不能同时出现
  4. 当我们在构造器的首行,既没有显式的声明”this(形参列表)“或”super(形参列表)“,则默认的调用的是父类中空参的构造器,相当于默认的有“super();”
  5. 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错

this和super的区别

在这里插入图片描述

目录
相关文章
|
1月前
|
Java
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
文章详细解释了Java关键字`super`的用途,包括访问父类的成员变量、调用父类的构造方法和方法,并提供了相应的代码实例。
111 5
Java关键字 —— super 详细解释!一看就懂 有代码实例运行!
|
4月前
|
存储 安全 Java
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
Java面试题:深入探索Java内存模型,Java内存模型中的主内存与工作内存的概念,Java内存模型中的happens-before关系,volatile关键字在Java内存模型中的作用
37 1
|
4月前
|
缓存 安全 算法
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
Java面试题:如何通过JVM参数调整GC行为以优化应用性能?如何使用synchronized和volatile关键字解决并发问题?如何使用ConcurrentHashMap实现线程安全的缓存?
45 0
|
1月前
|
Java
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
本文介绍了Java中this和super关键字的用法,包括在构造方法中使用this来区分参数和成员变量、使用super调用父类构造方法和方法,以及它们在同一个方法中同时使用的场景。
115 0
Java关键字 —— super 与 this 详细解释!一看就懂 有代码实例运行!
|
1月前
|
Java 程序员 编译器
【Java】继承、super、final、子类构造方法
【Java】继承、super、final、子类构造方法
26 0
|
2月前
|
Java 开发者
【Java编程新纪元】JDK 22:超级构造函数来袭,super(...) 前导语句改写编程规则!
【9月更文挑战第6天】JDK 22的超级构造函数特性是Java编程语言发展史上的一个重要里程碑。它不仅简化了代码编写,还提升了代码的可读性和维护性。我们有理由相信,在未来的Java版本中,还将有更多令人兴奋的新特性等待我们去发现和应用。让我们共同期待Java编程新纪元的到来!
|
4月前
|
存储 SQL Java
Java实现关键字模糊查询的高效方法及实践
实现关键字模糊查询的方法有多种,每种方法都有其适用场景。在选择合适的方法时,应考虑实际需求、数据量大小、性能要求等因素。正则表达式适用于处理简单文本或小数据集;数据库模糊查询适用于存储在RDBMS中的数据;而第三方库,则适合需要进行复杂搜索的大型项目。选用合适的工具,可以有效提升搜索功能的性能和用户体验。
95 6
|
3月前
|
Java
【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?
这篇文章阐述了Java泛型中的List<? super T>和List<? extends T>的区别,解释了通配符的使用规则,以及Java泛型设计原则确保了编译时无警告则运行时无ClassCastException异常。
|
4月前
|
算法 Java API
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
多线程线程池问题之synchronized关键字在Java中的使用方法和底层实现,如何解决
|
4月前
|
缓存 安全 Java
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性
77 4