返回顶部
首页 > 资讯 > 后端开发 > JAVA >Java关键字super解释
  • 430
分享到

Java关键字super解释

javajvm开发语言 2023-10-25 10:10:55 430人浏览 八月长安
摘要

目录 前言(废话文学)前言(定义)super()之构造方法super()之成员函数super()之成员变量结束语 前言(废话文学) 又是看了一大堆文字介绍,非常系统和官方,理解要费半天

目录

前言(废话文学)

又是看了一大堆文字介绍,非常系统和官方,理解要费半天劲,所以总结一下super它到底有啥用,还有代码演示也会放出来,这里使用的IDE为idea

前言(定义)

还是先官方一下

在java中,super表示超类(就是我们俗称的父类),当子类需要引用父类的字段时,我们就可以使用super.FieldName.



因此,本文就将从构造函数,公有成员函数,公有成员变量来分别演示super的作用,因为private私有成员是只允许自己使用的,所以这里也可以看出,super在继承关系中,对公有字段起作用。

super()之构造方法

如果父类(超类)没有默认的构造方法,子类就必须显式调用super(),并且必须使用父类中的某个构造方法的参数。

什么意思呢?就是有一个父类Parent,子类Son,如果我们在Parent中定义了构造函数,那么在继承父类的子类中就必须书写父类的构造函数。那么此时就需要将super()写在子类构造方法中。如果父类中没有定义构造方法,那么编译器会默认是public Parent(){}就是空的,此时在子类中不书写super也不会报错,因为编译器默认生成子类构造方法为空,super()就默认是隐藏的。就是构造函数必须有super(),(开个玩笑:你说那我看到的有的咋没有,不是没有,只是只有聪明人能看见嘿嘿嘿。)如果子类中没有super(),那是因为编译器替你干了这个活,它隐藏了super()这个默认的无参构造方法,算是隐式调用。注意显式二字。

来了来了,代码示例它来了

父类

public class Parent {    //public Parent(){}//可以不写,编译器会默认是它,空的    // 为了查看效果,我们把父类无参构造函数里加个输出    public Parent(){        System.out.println("This is Parent!");    }}

子类

public class Son extends Parent{    public Son(){//此时不写super也不会报错,因为编译器默认是有super(),只不过隐藏了。        System.out.println("This is son!");    }}

MyMain.java

public class MyMain {    public static void main(String[] args){        Son son = new Son();    }}

来,让我们看看效果,会发现父类构造方法也执行了。所以说super()意思就是调用父类的方法,往往我们通过传参的方式来达到我们所先要的结果
1
现在修改父类代码如下

public class Parent {public Parent(String name,int id){        System.out.println(name+"  "+id);    }}

子类代码如下

public class Son extends Parent{    public Son(String name,int id){        System.out.println("This is son!");    }}

MyMain类代码如下

public class MyMain {    public static void main(String[] args){        String name ="Bob";        int id=12;        Son son = new Son(name,id);    }}

当当当,报错了,为啥,你没写super,因为默认隐藏super是super(),它没有传入任何参数,就导致子类在继承父类时,父类构造器就无法应用到子类中。
java: 无法将类 Parent中的构造器 Parent应用到给定类型;

1
修改子类代码如下,其它不变,发现可以运行了,因为传入了String参数和int参数,与父类一致,所以super()表示子类使用父类构造函数,(就是子类重载了父类函数,因为函数名和参数都必须相同),同时它也可以自己在构造函数中添加其它逻辑:

public class Son extends Parent{    public Son(String name,int id){        super(name, id);        System.out.println("This is son!");    }}

1

super()之成员函数

对于可继承的成员函数,如果子类在重写父类的方法同时想要调用(实现)与父类相同的方法,那么就用super.func(obj,obj,…)。与构造函数不同的是,super.func()可以不用放在函数一开始的位置,而构造方法的super()必须放在函数体中最前面的位置。

来了来了,代码示例它来了
父类

public class Parent {    private String name="Pang pang";    private int id=12;    private String selfIntro="This is a fat parent";    public Parent(){}    public void getName() {        System.out.println(name);    }    public void getId(){        System.out.println(id);    }    public void getSelfIntro() {        System.out.println(selfIntro);    }}

子类

public class Son extends Parent{    private static String sonIntro="This is Feifei's child";    public Son(){System.out.println("This is Son:");}    @Override    public void getSelfIntro() {        System.out.println(sonIntro);        System.out.println("I want to see my parents' introduction: ");        super.getSelfIntro();//可写可不写,只是看子类想不想调用它,它可以放在任何想调用的位置,返回的是父类的介绍        //如果子类想调用却不写super的话就会报错    }}

主类

public class MyMain {    public static void main(String[] args){        //从子类读取信息        Son son = new Son();        son.getSelfIntro();    }}

结果展示
1
看到这,你一定想问,那要是一个有参数的成员函数咋个整呢,是啊,咋个整呢。其实你会发现,需要传参的一般情况下不会再调用super,因为子类优先原则会覆盖掉父类的数据,比如下面来演示一下。当然有的参数不影响的情况下,想要调用父类的含参成员函数还是可以调用super的

父类

public class Parent {    private String name;    private int id;    public Parent(){}    public void setInfo(String name,int id){        this.name=name;        this.id=id;    }    public void getInfo(){        System.out.println(name+"  "+id);    }}

子类

public class Son extends Parent{    private String name;    private int id;    public Son(){}    @Override    public void setInfo(String name,int id){        super.setInfo(name,id);//将值传递给父类        this.name=name;        this.id=id;    }    @Override    public void getInfo(){//打印信息        System.out.println("This is parents' infORMation:");        super.getInfo();        System.out.println("This is son's information: ");        System.out.println(name+"  "+id);    }}

主类

public class MyMain {    public static void main(String[] args){        //由于子类优先原则,会将所有的值由子类传递给父类,顺便演示一下子类优先原则        //设置父类信息        Parent parent=new Parent();        String pName="Pang pang";        int pId = 11;        parent.setInfo(pName,pId);        System.out.println("This is first parent:");        parent.getInfo();//打印出来看看,此时还是很正常的父类的值        //设置子类信息,会发现父类信息失效了        Son son = new Son();        String sName = "Fei fei";        int sId = 15;        son.setInfo(sName,sId);        son.getInfo();    }}

1

super()之成员变量

通过super.变量名就可以在子类中访问父类的成员变量,但是只有protected和public的成员变量可以被访问,而private的变量子类是访问不到的。

父类

public class Parent {    private String inf1 = "Parent: stupid!";    protected String inf2 = "Parent: Kids!";    public String inf3 = "Parent: eat!";}

子类

public class Son extends Parent{    private String inf1;    protected String inf2;    public String inf3;    public Son(){}    public void setInfo(String inf1,String inf2,String inf3){        this.inf1=inf1;        this.inf2=inf2;        this.inf3=inf3;    }    public void getInfo(){//打印信息        System.out.println("This is son's information: ");        System.out.println(inf1);        System.out.println(inf2);        System.out.println(inf3);        System.out.println("This is parents' information:");        //System.out.println(super.inf1);        System.out.println(super.inf2);        System.out.println(super.inf3);    }}

主类

public class MyMain {    public static void main(String[] args){        //设置子类信息        Son son = new Son();        String ss1 = "Son: mom!";        String ss2 = "SOn: sorry!";        String ss3 = "Son: play!";        son.setInfo(ss1,ss2,ss3);        son.getInfo();    }}

运行结果
1
如果调用了private变量时会报错的,如下图
1

结束语

总结在前言,到此super解析完成,若有疑问或者任何问题欢迎指出。

来源地址:https://blog.csdn.net/qq_43738932/article/details/126637221

--结束END--

本文标题: Java关键字super解释

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

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

猜你喜欢
  • Java关键字super解释
    目录 前言(废话文学)前言(定义)super()之构造方法super()之成员函数super()之成员变量结束语 前言(废话文学) 又是看了一大堆文字介绍,非常系统和官方,理解要费半天...
    99+
    2023-10-25
    java jvm 开发语言
  • Java中super关键字详解
    目录super有什么用?super什么时候不可以省略呢?super在内存图中是如何存在的呢?super使用时的注意事项总结super有什么用? (1)当子类中构造方法第一行没有sup...
    99+
    2024-04-02
  • Java中super和this关键字详解
    目录父类空间优先于子类对象产生super和this的含义super和this的用法继承的特点父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。...
    99+
    2024-04-02
  • Java super关键字的使用详解
    目录1.super介绍2.super的基本使用3.子类和父类方法的调用细节4.super和this的区别1.super介绍 我们可以通过super关键字来实现对父类成员的访问,用来引...
    99+
    2024-04-02
  • 详解怎么用Java的super关键字
    Java的super关键字 当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。为了解决这个问题,在Java中专门提供了一个super关键字来访问父类的成员,例如访问父类...
    99+
    2024-04-02
  • Java关键字this与super详解用法
    目录一、this 关键字的使用1. 概述2. 作用3. 使用3.1 修饰属性和方法3.2 调用构造器3.3 返回当前对象二、super关键字的使用1. 概述2. 使用3. 使用3.1...
    99+
    2024-04-02
  • Java中super关键字怎么用
    本篇内容介绍了“Java中super关键字怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!super有什么用?(1)当子类中构造方法第一...
    99+
    2023-06-29
  • Java super关键字怎么使用
    本文小编为大家详细介绍“Java super关键字怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java super关键字怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.s...
    99+
    2023-07-02
  • Java super关键字的使用方法详解
    构造方法中的super关键字在Java子类的构造方法中可以通过super关键字来调用父类的构造方法。其用法为: 1) super(); 访问父类中的无参构造函数 2) super (paras…); 访问父类中的成员函数yyy super(...
    99+
    2023-05-31
    java super ava
  • Java中super关键字介绍以及super()的使用
    目录1、super的使用:2、先复习一下this关键字的使用。3、super关键字:总结:1、super的使用: (1)super是一个关键字。 (2)super和this很类似,我...
    99+
    2024-04-02
  • Java基础之super关键字浅析
    目录一、定义二、应用2.1    应用范围2.2    用法2.2.1    在子类中调用父类的属性或方法2.2.2 &n...
    99+
    2024-04-02
  • 如何使用Java的super关键字
    这篇文章给大家分享的是有关如何使用Java的super关键字的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的super关键字当子类重写父类的方法后,子类对象将无法直接访问父类被重写的方法。为了解决这个问题...
    99+
    2023-06-15
  • Java中super关键字怎么使用
    这篇文章主要讲解了“Java中super关键字怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java中super关键字怎么使用”吧!supersuper是一个关键字,全部小写。sup...
    99+
    2023-07-02
  • java中super关键字有什么用
    在Java中,super关键字有以下几种用途:1. 调用父类的构造方法:在子类的构造方法中,可以使用super关键字来调用父类的构造...
    99+
    2023-08-24
    java super
  • Java中this和super关键字的使用详解
    目录父类空间优先于子类对象产生super和this的含义super和this的用法继承的特点父类空间优先于子类对象产生 在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。...
    99+
    2022-11-13
    Java this super关键字 Java this关键字 Java super关键字
  • 如何使用Java中的Super关键字
    本篇内容主要讲解“如何使用Java中的Super关键字”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Java中的Super关键字”吧!一、重写父类方法什么是重写父类方法在继承关系中,子类...
    99+
    2023-06-15
  • super关键字如何在Java中使用
    super关键字如何在Java中使用?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。 java方法重写和super关键字  在继承中,其实就是...
    99+
    2023-05-31
    java ava super
  • java中的super关键字怎么使用
    在Java中,super是一个关键字,用于引用父类的成员变量、成员方法和构造方法。1. 引用父类的成员变量:可以使用super关键字...
    99+
    2023-08-08
    java super
  • Java的this和super关键字怎么用
    本文小编为大家详细介绍“Java的this和super关键字怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java的this和super关键字怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、“ t...
    99+
    2023-06-30
  • Java关键字详解之final static this super的用法
    目录1. final 关键字:2. static 关键字:3. this 关键字:4. super 关键字:final,static,this,super 关键字总结 正文开始@A...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作