关键字-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。