广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java基础之super关键字浅析
  • 935
分享到

Java基础之super关键字浅析

2024-04-02 19:04:59 935人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、定义二、应用2.1    应用范围2.2    用法2.2.1    在子类中调用父类的属性或方法2.2.2 &n

本文重点介绍super关键字,在Java中的作用以及用法。

一、定义

它是一个指代变量,用于在子类中指代父类对象。

二、应用

2.1    应用范围

只能用于子类的构造函数和实例方法中,不能用于子类的类(静态)方法中。原因是super指代的是一个父类的对象,它需要在运行时被创建,而静态方法是类方法,它是类的一部分。当类被加载时,方法已经存在,但是这时候父类对象还没有被初始化。

2.2    用法

在Java中super有两种使用场景。

2.2.1    在子类中调用父类的属性或方法

在子类中调用父类的属性或方法。特别是子类中有与父类相同的属性或者方法,那么这时如果你想调用父类的属性或者方法,那么你必须使用super关键字。因为子类中和父类中的属性或方法同名,则父类中的方法或属性将被覆盖或隐藏。super可以指代父类中的类属性和类方法,但是并不建议这么用,虽然不会报错,但是说明你对static关键字还不够了解。请认真查看并理解static关键字。

public class Parent {
    public String name = "小头爸爸";
    public boolean hasMoney = false;
 
    public void sleeping(){
        System.out.println("爸爸已经睡了");
    }
 
    public void working(){
        System.out.println("爸爸正在工作。。。");
    }
}
 
public class Child extends Parent {
 
    public String name = "大头儿子";
 
    
    private void testParam(){
        System.out.println("爸爸的名字叫" + super.name);
        System.out.println("孩子的名字是" + name);
        System.out.println("爸爸是否有有钱:" + hasMoney);
    }
 
    
    public void testMethod(){
        sleeping();
        super.sleeping();
        super.working();
    }
 
    public void sleeping(){
        System.out.println("儿子已经睡了");
    }
 
    public static void main(String[] args) {
        Child child = new Child();
        child.testParam();
        child.testMethod();
    }
}

测试结果:

=============

爸爸的名字叫小头爸爸
孩子的名字是大头儿子
爸爸是否有有钱:false
儿子已经睡了
爸爸已经睡了

爸爸正在工作。。。

============

2.2.2    在子类中指代父类构造器

在Java中,子类是父类的派生类,它的实例化依赖于父类的实例化。所以它的任何一个构造函数都必须要初始化父类,Java就是super关键字调用父类构造方法,来完成这个操作。

有人会奇怪,那为什么在2.1.1的例子,父类没有构造方法,子类也没有构造方法,难道在某些情况下,实例的初始化并不依赖于构造函数?

答案是,实例的初始化必须要构造函数。2.2.1没有构造函数的原因是,在Java类定义中,如果开发者没有显示的定义构造函数,那么Java会隐式的为该类定义一个无参构造函数。但是如果开发者自己定一个构造函数(无论有参还是无参),那么Java就不会再为该类隐式的定义一个无参构造函数了。

那么还原构造函数后的代码:

public class Parent {
    ...
    public Parent() {
    }
    ...
}
 
public class Child extends Parent {
    ...
    public Child() {
    }
    ...
}

那么又有人有奇怪了,你不是说子类的实例化依赖于父类的实例化,那么在子类的构造函数中应该需要调用super来初始化父类不是吗?

是的,在我们子类的构造函数中,如果我们没有显式调用super来初始化父类的话,那么Java会隐式的调用super();来调用父类无参构造函数并把它放在构造函数的第一行。记住哦,Java只会隐式的调用无参构造函数,如果父类没有无参构造函数,那么子类中就必须显示的调用super关键字来调用已有的有参构造函数来初始化父类。

public class Parent {
    public String name = "小头爸爸";
    public Parent(int age) {
    }
 
    public void sleeping(){
        System.out.println("爸爸已经睡了");
    }
}
 
public class Child extends Parent {
    public String name = "大头儿子";
    public Child() {//如果没有super来初始化父类,同样也会报错
//        super();//编译期报错,因为父类并没有无参构造函数
        super(15);//正确打开方式
    }
 
    private void printParentName(){
        System.out.println("爸爸的名字叫" + super.name);
    }
 
    private void parentStatus(){
        super.sleeping();
    }
}

子类中的super为什么必须要放在第一行?因为子类的实例化依赖于父类的实例化,在构建子类时,必须要有父类实例,只能有了父类的实例,子类才能够初始化自己。就好像人类世界里,都是要先有父亲,再有孩子一样。

附:super实际使用示例

下面来看看super关键字的实际用法。 在这里,Emp类继承了Person类,所以Person的所有属性都将默认继承到Emp。 要初始化所有的属性,可使用子类的父类构造函数。 这样,我们重用了父类的构造函数。

class Person {
    int id;
    String name;

    Person(int id, String name) {
        this.id = id;
        this.name = name;
    }
}

class Emp extends Person {
    float salary;

    Emp(int id, String name, float salary) {
        super(id, name);// reusing parent constructor
        this.salary = salary;
    }

    void display() {
        System.out.println(id + " " + name + " " + salary);
    }
}

class TestSuper5 {
    public static void main(String[] args) {
        Emp e1 = new Emp(1, "ankit", 45000f);
        e1.display();
    }
}

结果如下:

1 ankit 45000

总结

super关键字指代父类对象,主要用于在子类中指定父类的方法和属性,也用于在子类中初始化父类。子类的静态方法中不能使用super关键字。

到此这篇关于Java基础之super关键字的文章就介绍到这了,更多相关Java super关键字内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java基础之super关键字浅析

本文链接: https://www.lsjlt.com/news/145693.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java基础之super关键字浅析
    目录一、定义二、应用2.1    应用范围2.2    用法2.2.1    在子类中调用父类的属性或方法2.2.2 &n...
    99+
    2022-11-13
  • java基础之关键字的示例分析
    这篇文章将为大家详细讲解有关java基础之关键字的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、static关键字1.1 使用static关键字定义属性在讲解static定义属性操作之前,首先...
    99+
    2023-06-20
  • Java基础之关键字final详解
    Java-关键字:final 1 .final可以用来修饰的结构: 类、方法、变量 2.final 用来修饰一个类: 此类不能被其他类所继承 比如:String类、Sys...
    99+
    2022-11-12
  • 【Java 基础】引用型数组、Java 继承、super 关键字详解
    《Java 零基础入门到精通》专栏持续更新中。通过本专栏你将学习到 Java 从入门到进阶再到实战的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 ...
    99+
    2023-08-31
    java 开发语言 后端
  • Java基础之this关键字的使用
    一、this关键字的作用 this关键字除了可以强调本类中的方法还具有以下作用。 1.表示类中的属性 2.可以使用关键字调用本类中的构造方法 3.this表示当前对象 1.1表示类中...
    99+
    2022-11-12
  • 【Java基础】volatile关键字
    关于作者:CSDN内容合伙人、技术专家, 从零开始做过日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、人工智能等,希望大家多多支持。 目录 一、导读二、概览2.1 作用2.2 多线程共享变量的访...
    99+
    2023-08-17
    java 开发语言 android 面试
  • Java基础之final关键字作用案例
    final关键字的作用 final关键字可以用来修饰引用、方法和类。 1.final关键字修饰类 当用final关键字修饰一个类后,这个类不能被继承。代码示例如下:  所...
    99+
    2022-11-12
  • Oracle基础之保留字和关键字
    Oracle基础之保留字和关键字 在Oracle之中,有分为保留字和关键字,所谓关键字就是Oracle中有实际意义的,而保留字(比如DESC、ORDER等等)是Oracle中不能随便使用的,比如不能随便用来做表的列名,当然关键字(比如KEY...
    99+
    2019-03-25
    Oracle基础之保留字和关键字
  • Java基础之static关键字的使用讲解
    static关键字 在Java中,static是静态修饰关键字。用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能;被static关键字修饰的方法或者变...
    99+
    2022-11-12
  • Java面向对象之super关键字怎么用
    这篇文章将为大家详细讲解有关Java面向对象之super关键字怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。public class Test1 {public&nbs...
    99+
    2023-06-02
  • Java关键字详解之final static this super的用法
    目录1. final 关键字:2. static 关键字:3. this 关键字:4. super 关键字:final,static,this,super 关键字总结 正文开始@A...
    99+
    2022-11-12
  • 深入浅析Java中的 static关键字
    本篇文章为大家展示了深入浅析Java中的 static关键字,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、 static代表着什么      在...
    99+
    2023-05-31
    java 关键字 static
  • 深入浅析Java中的this、final关键字
    这篇文章给大家介绍深入浅析Java中的this、final关键字,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。this关键字this引用对象自身。它也可以在构造方法内部用于调用同一个类的其他构造方法。 隐藏的静态变量可...
    99+
    2023-05-31
    java this final
  • 浅析对Java关键字final和static的理解
    一、final            根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修...
    99+
    2023-05-31
    java static final
  • C 语言基础之C语言的常见关键字
    目录​1、auto 2、register 3、signed和unsigned 4、typedef 5、extern 6、拓展首先我们简单的和这些关键字见见面(被高亮的关键...
    99+
    2022-11-12
  • 【Java 基础】构造方法和 this 关键字详解
    《Java 零基础入门到精通》专栏持续更新中。通过本专栏你将学习到 Java 从入门到进阶再到实战的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,...
    99+
    2023-08-16
    java 开发语言 后端 jvm
  • 了解 Java 中的关键字:从基础到高级
    Java 是一种广泛使用的编程语言,其强大的特性和广泛的应用范围使得 Java 成为了人们最喜欢的编程语言之一。在 Java 中,关键字是非常重要的部分,因为它们定义了该语言的核心特性。本文将介绍 Java 中的关键字,从基础到高级,为您提...
    99+
    2023-07-05
    关键字 函数 npm
  • Java基础学习之关键字和变量数据类型的那些事
    目录一. 关键字二. 变量2.1 变量的定义2.2 变量的分类1. 按照数据类型分类三. 字符编码补充:变量的声明和初始化总结一. 关键字 Java中的关键字是由特定的单词组成,单词...
    99+
    2022-11-13
  • JAVA面试题之static关键字的示例分析
    这篇文章给大家分享的是有关JAVA面试题之static关键字的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题面试官Q1:请说说static关键字,你在项目中是怎么使用...
    99+
    2022-10-19
  • Java并发编程之关键字volatile的深入解析
    目录前言一、可见性二、有序性总结前言 volatile是研究Java并发编程绕不过去的一个关键字,先说结论: volatile的作用:       &n...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作