一、区分
父类的变量和子类的变量是两个不同的实值。
super()只对父类的实例变量起作用。
二、例子
1.不使用super构造,只管子类的实例变量
可见父类的实例变量并没有被赋值。
class Animal {
public int a;
Animal(){}
Animal(int a){
this.a = a;
}
}
public class Dog extends Animal{
private int a;
Dog(int a){
this.a = a;
System.out.println(this.a);
System.out.println(super.a);
}
public static void main(String[] args) {
Dog dog = new Dog(10);
/*
10
0
*/
Animal animal = new Dog(100);
/*
100
0
*/
System.out.println(animal.a);
/*
0
*/
}
}
2.使用super构造,只管父类的实例变量
可见子类的实例变量并没有被赋值。
class Animal {
public int a;
Animal(int a){
this.a = a;
}
}
public class Dog extends Animal{
private int a;
Dog(int a){
super(a);
System.out.println(this.a);
System.out.println(super.a);
}
public static void main(String[] args) {
Dog dog = new Dog(10);
Animal animal = new Dog(100);
}
}
/*
0
10
0
100
*/
3.双构造
class Animal {
public int a;
Animal(int a){
this.a = a;
}
}
public class Dog extends Animal{
private int a;
Dog(int a){
super(a);
this.a = a;
System.out.println(this.a);
System.out.println(super.a);
}
public static void main(String[] args) {
Dog dog = new Dog(10);
Animal animal = new Dog(100);
}
}
/*
10
10
100
100
*/
三、意义
如果使用向上造型
- 用
super()
来给父类变量赋值才能使用父类特有的方法(有关成员变量赋值的)达到想要的效果。 - 用
this.xxx = xxx
来给子类变量赋值才能使用子类重写的方法(有关成员变量赋值的)达到想要的效果。