关键字-super

时间:2023-03-09 19:13:02
关键字-super

super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

    String name;
int age; void value(){
name = "张三";
age = 20;
}
} class UserAction extends BaseAction{ } class Main extends UserAction{ String name;
int age; public static void main(String[] args){
Main m = new Main();
m.value();
} void value(){
super.value();
name = super.name;
age = super.age; System.out.println(name);
System.out.println(age);
} }

运行结果:

张三
20

    String name;
int age; void value(){
name = "张三";
age = 20;
}
} class UserAction extends BaseAction{
String name;
int age; void value(){
name = "李四";
age = 21;
}
} class Main extends UserAction{ String name;
int age; public static void main(String[] args){
Main m = new Main();
m.value();
} void value(){
super.value();
name = super.name;
age = super.age; System.out.println(name);
System.out.println(age);
} }

运行结果:

李四
21


String name;
int age; void value(){
name = "张三";
age = 20;
}
} class UserAction extends BaseAction{
String name; void value(){
name = "李四";
}
} class Main extends UserAction{ String name;
int age; public static void main(String[] args){
Main m = new Main();
m.value();
} void value(){
super.value();
name = super.name;
age = super.age; System.out.println(name);
System.out.println(age);
} }

运行结果:

李四
0

总结:super.value()指向的是父类,但是父类中并不存在age,所以这时候age的值是默认值0。


String name;
int age; void value(){
name = "张三";
age = 20;
}
} class UserAction extends BaseAction{
String name; void value(){
super.value();
name = "李四";
}
} class Main extends UserAction{ String name;
int age; public static void main(String[] args){
Main m = new Main();
m.value();
} void value(){
super.value();
name = super.name;
age = super.age; System.out.println(name);
System.out.println(age);
} }

运行结果:

李四
20

总结:super.value()指向的是父类,但是父类中并不存在age,所以在父类中执行super.value(),让父类去调用自身父类的方法,这时候age才被赋值。因为在Main类中的value()方法中执行的super指向的是UserAction。


String name;
int age; void value(){
name = "张三";
age = 20;
}
} class UserAction extends BaseAction{
String name;
int age; void value(){
name = "李四";
age = 21;
}
} class Main extends UserAction{ String name;
int age; public static void main(String[] args){
Main m = new Main();
m.value();
} void value(){
name = super.name;
age = super.age; System.out.println(name);
System.out.println(age);
} }

运行结果:

null
0

总结:既调用父类的value()方法又调用父类的变量。如果只调用类型的变量,不调用父类的value()方法,name的值就是默认值null,age的值就是默认值0。