super关键字
1. super.属性和super.方法
如下,有一父类Transport
package test2;
public class Transport {
String typeOfVehicle="小汽车";//车辆类型
float speed=150.2f;//车速
public void run() {
System.out.println(typeOfVehicle+"能跑"+speed+"KM/H");
}
}
有一个子类Car
package test2;
public class Car extends Transport {
//方法的重写
public void run() {
System.out.println(super.typeOfVehicle+"的速度是"+super.speed);
}
}
建立一个测试类
package test2;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car=new Car();
car.run();
}
}
执行结果如下:
可以看到,对子类对象进行实例化后,子类的super关键字均调用了父类的属性和方法
2.super关键字与构造方法的关系
仍然以上述代码为例,作微小改动
父类如下:
package test2;
public class Transport {
String typeOfVehicle="小汽车";//车辆类型
float speed=150.2f;//车速
public void run() {
System.out.println(typeOfVehicle+"能跑"+speed+"KM/H");
}
public Transport() {
System.out.println("父类构造方法被执行");
}
}
子类如下:
package test2;
public class Car extends Transport {
//方法的重写
public void run() {
System.out.println(super.typeOfVehicle+"的速度是"+super.speed);
super.run();
}
public Car() {
//super();//此处super()可加可不加,初始化子类对象时,父类的构造方法首先执行
System.out.println("子类方法被执行");
}
}
Test类如下:
package test2;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Car car=new Car();
}
}
运行结果如下:
从运行结果可看到,子类初始化过程中隐式的调用了父类初始化方法,即使用了super();但super可写可不写。如果不写,则默认调用父类无参的构造方法;如果写,必须在第一行。当父类有一个有参数的构造方法时,则编译器不会自动构建无参的构造方法,此时在子类中如果要调用父类的构造方法,则必须用super();且必须放在子类构造方法的第一行