我们想一下this指向的是什么,是当前对象自己。super和this类似,它指向了当前对象自己的父类型特征(也就是继承过来的那些东西)。
每当创建子类的实例时,父类的实例被隐式创建,由super
关键字引用变量引用。
java super
关键字的用法如下:
super
可以用来引用直接父类的实例变量。super
可以用来调用直接父类方法。super()
可以用于调用直接父类构造函数。
举例。将Animal中name 赋值为Animal,eat方法改为 System.out.println("Animal eat");
public class Animal {
protected String name="Animal";
private String color;
public void run(){
System.out.println(" run");
}
public void eat(){
System.out.println("Animal eat");
}
}
在Dog类中
public void dogEat(){
String name = super.name;
System.out.println(name);
//super.方法名();
super.eat();
}
2.使用父类的构造方法
形式:super(参数列表);必须位于调用它的方法体的首句
public class Animal {
protected String name="Animal";
Animal(String xname){
System.out.println("父类Animal");
this.name = xname;
}
}
public class Dog extends Animal {
Dog(String name) {
super(name);
}
public static void main(String[] args) {
Dog dog = new Dog("dog");
System.out.println(dog.name);
}
}
子类中新定义的成员
成员变量,子类可重新定义,对父类成员进行隐藏
子类中 private String name="dog";
public class Dog extends Animal {
private String name="dog";
public static void main(String[] args) {
System.out.println(new Dog().name);
}
}
实例成员方法,子类可重新定义可见的成员方法,对父类成员进行覆盖,
public class Animal {
protected String name="Animal";
public void eat(){
System.out.println("Animal eat");
}
}