super关键词可以和this关键词比较学习。
this关键词表示“这个类”/“这个对象”
super关键词则表示“这个类的父类”,所以super只能用在子类当中
代码
//Animal作为父类
public class Animal {
String name = "动物";
}
//Cat作为子类,继承Animal
public class Cat extends Animal{
private String name = "小黑";
public void test(){
System.out.println(name);
System.out.println(this.name);
System.out.println(super.name);
}
}
//运行类
public class Application {
public static void main(String[] args) {
Cat xiaohei = new Cat();
xiaohei.test();
}
}
输出结果
属性和方法一样,父子同名的话,子想要调用父的东西就要用super关键字。如果不是同名的话,子可以直接调用就行了,不用super都行。
代码2
//Animal作为父类
public class Animal {
String name = "动物";
public void print(){
System.out.println("动物print");
}
}
//Cat作为子类,继承Animal
public class Cat extends Animal{
private String name = "小黑";
public void print(){
System.out.println("猫print");
}
public void test2(){
print();
this.print();
super.print();
}
}
//运行类
public class Application {
public static void main(String[] args) {
Cat xiaohei = new Cat();
xiaohei.test2();
}
}
输出结果
调用父子同名方法,如果不用任何修饰词,默认调用本类的方法,想用父类的同名方法的话就要用super。如果不同名的话,是可以不用任何修饰词直接调用父类的方法的。
代码3
//Animal作为父类
public class Animal {
String name2 = "动物";
public Animal() {
System.out.println("动物构造器work");
}
}
//Cat作为子类,继承Animal
public class Cat extends Animal{
private String name = "小黑";
public Cat() {
System.out.println("猫构造器work");
}
}
//运行类
public class Application {
public static void main(String[] args) {
Cat xiaohei = new Cat();
}
}
输出结果
实例化子类,父类和子类的构造器都会执行。
//Cat作为子类,继承Animal
public class Cat extends Animal{
private String name = "小黑";
public Cat() {
//其实这里有隐藏的代码
//super();
//所以它会去调用父类构造器
/*
super()父类的构造方法
this()子类的构造方法
*/
System.out.println("猫构造器work");
}
}
//Cat作为子类,继承Animal
public class Cat extends Animal{
private String name = "小黑";
public Cat() {
System.out.println("猫构造器work");
super();
//这样写是错的,要么不写,它会默认把super()放到第一句。如果写出来了,就必须是第一句,不然报错
}
}