# super 关键字的介绍及三种用法
发布日期:2021-05-10 01:33:20 浏览次数:11 分类:精选文章

本文共 1739 字,大约阅读时间需要 5 分钟。

一. super 关键字介绍

二. 调用父类方法

三. 调用父类成员变量

四. 调用父类构造方法

一. super 关键字介绍

super用来调用本类所继承的直接父类对象(直接父类),super相当于是一个直接new出来的父类对象,可以通过它来调用父类的那些非private修饰的变量、方法

普通对象(通过“对象名.变量名或方法名”),和super一样也只能访问父类成员中那些 非private的成员变量、方法

所以,super这个对象也就是一个普通对象,同样遵循访问控制修饰符的准则。既然如此,

super是不是多余了?实际上并不多余,super可以明确提示我们这是调用的父类变量或方法

二. 调用父类方法

当发成重写父类方法时。如下:

public class A {       String name = "lly";    protected void getName(){           System.out.println("父类getName->"+ name);    }}public class B extends A {       String nameB = "llyB";    @Override    protected void getName() {           System.out.println("子类getName->"+nameB);        super.getName();    }    public static void main(String[] args) {           B b = new B();        b.getName();    }}

B类继承A类,并重写了A类的getName()方法。此时如果需要调用父类中的getName()方法。可以使用super.getName()。

super本意 顶级,超级。可以超越本类,调用父类方法。

运行结果:

子类getName->llyB
父类getName->lly

三. 调用父类成员变量

把上面代码稍作修改

public class A {       String name = "lly";    protected void getName(){           System.out.println("父类getName->"+ name);    }}public class B extends A {       String name = "llyB";    @Override    protected void getName() {           name = super.name;        System.out.println("子类getName->"+name);    }    public static void main(String[] args) {           B b = new B();        b.getName();    }}

运行结果:

子类getName->lly

B类继承A类,A类中有一个name变量,B类中也有一个name变量。此时,如果想在B类中调用父类(A类)中的name变量。则需要用super.name来调用。

如果没有加super,直接写成name = name;不会报错,只是会警告,表示此条语句没有任何意义,因为此时都是访问的子类B里面的那么字段。

四. 调用父类构造方法

在子类的构造方法中,编译器会自动在子类构造函数的第一句加上 super(); 来调用父类的无参构造器;此时可以省略不写。

如果想写上的话必须在子类构造函数的第一句,可以通过super来调用父类其他重载的构造方法,只要相应的把参数传过去就好。

因此,super的作用主要在下面三种情况下:

1、调用父类被子类重写的方法;
2、调用父类被子类重定义的字段(被隐藏的成员变量);
3、调用父类的构造方法;

代码参考:https://blog.csdn.net/shakespeare001/article/details/51388516

上一篇:# This 关键字的用法总结
下一篇:Java 数值计算 向量的1范数、2范数、oo范数

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年03月31日 05时29分05秒