
本文共 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->llyB类继承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
发表评论
最新留言
关于作者
