JAVA中多态与super关键字
多态
继承的表现就是多态,一个父类可以有多个子类,而在子类里可以重写父类的方法,每个子类重写的代码又不同,自然表现的形式就不一样
如果用父类的变量去引用不同的子类对象,在调用相同的方法的时候得到的结果就和表现形式就不一样了,这就是多态
super关键字
super(超类):用java术语来讲,被继承的类称为超类,继承的类称为子类
在某些时候子类需要调用父类的某些方法,这时候我们就需要用到super
super关键字和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的成员变量和成员方法,不过super是用在子类中,
目的是访问直接父类中被屏蔽的成员,注意是直接父类(就是类之上最近的超类)
car类:
package Myapp.day4; /* Car类 */ public class Car extends Vehicle{ //品牌 private String brand; //颜色 private String color; //车架号 private String vin; //名字 private String name; //能跑 public void carRun(){ System.out.println("car run run ....."); } //构造方法,一定是没有返回值的 //无参数的构造方法 public Car(){ super(); //调用父类的无参构造方法 System.out.println("子类无参的构造方法"); } //有参数的构造方法 public Car (String name){ super(name); //调用父类的有参构造方法 this.name = name; System.out.println("子类有参的构造方法"); } public void carrun(){ System.out.println("car run run ......"); } //重载构造方法 public Car (String name,String color){ this.name = name; this.color = color; } }
Vehicle类:
package Myapp.day4; /** * Vehicle 车辆类--具有car truck共有的属性和方法 */ public class Vehicle { //品牌 public String brand; //颜色 public String color; //车架号 public String vin; //名字 public String name; public Vehicle(String name){ this.name = name; System.out.println("父类有参数的构造方法"); } public Vehicle(){ System.out.println("父类无参数的构造方法"); } //能跑 public void carRun(){ System.out.println("fathercar run run ....."); } }
Truck类
package Myapp.day4; //Truck继承了Vehicle /* Truck类 */ public class Truck extends Vehicle { //载重量 private String load; //能载货 public void canload(){ System.out.println("truck can load....."); } //重写父类方法 public void carRun(){ System.out.println("truck run run......"); } public static void main(String[] args){ Truck truck = new Truck(); truck.carRun(); //调用父类的属性 truck.brand = "BYD"; System.out.println("品牌为"+truck.brand); } }
执行main方法:
package Myapp.day4; public class Test { public static void main(String[] args) { //多态的例子 Vehicle v1 = new Vehicle(); Vehicle v2 = new Car(); Vehicle v3 = new Truck(); v1.carRun(); v2.carRun(); v3.carRun(); // //super的例子 // Vehicle V2 = new Car(); // Vehicle v3 = new Car("fengtian"); } }