super关键字可以理解为父类的
,即调用父类的变量,方法等等。
1、直接引用
和this类似,super直接指向父类,来取得父类中的成员,super.xxx来引用。
2、与父类中的成员变量或方法重名时
class Country {
String name;
void value() {
name = "中国";
}
}
class City extends Country {
String name;
void value() {
name = "深圳";
super.value(); //调用父类中的方法 给父类中的name赋了值
System.out.println(name); //输出深圳
System.out.println(super.name); //(调用父类中的成员变量)输出中国
}
public static void main(String[] args) {
City c=new City();
c.value();
}
}
(之前有看过很多面试题会有类似的题目 给大家简单的说明一下上面这个方法的流程)
- 1.首先
City c = new City()
创建一个对象c - 2.
c.value()
调用City中的value()方法name = “深圳” 给city中的成员变量name赋值为“深圳” - 3.
super.value()
调用Country中的value方法给父类中的name赋值为“中国” //如果把super.value()
给删掉 不进行赋值 后面输出父类中的成员变量自然就是null了
3、构造方法中
class Person {
Person() {
System.out.println("父类 无参构造方法");
}
Person(String name) {
System.out.println("父类 带String参数构造方法 name = " + name);
}
}
public class Chinese extends Person {
Chinese() {
super(); // 调用父类中无参构造方法
System.out.println("子类 无参构造方法");
}
Chinese(String name) {
super(name);// 调用父类中带有一个String参数的方法
System.out.println("子类 带一个String的方法 name = " + name);
}
Chinese(String name, int age) {
this(name);// 调用当前类中带有一个String参数的方法
System.out.println("子类 带一个String和一个int的方法 name = " + name + ",age = " + age);
}
public static void main(String[] args) {
Chinese cn = new Chinese();
cn = new Chinese("wingzing");
cn = new Chinese("wingzing", 21);
}
}
我了解到存在部分大学生甚至工作一两年的工程师都不太了解构造方法什么时候调用的,所以在这里简单的聊两句
- 1.
Chinese cn = new Chinese()
创建一个cn对象,当创建这个对象的时候 会自动去调用Chinese类中的无参构造方法(同理后面的创建对象的时候带参数,自然是自动调用对应的构造方法) - 2.调用Chinese中的无参构造方法后,其中有一个
super()
这个方法又会去调用其父类的无参构造方法
能不通过ide能完全知道以上两个程序的运行步骤,基本上就弄懂了super关键字的用法。