多态
继承的表现就是多态,一个父类可以有多个子类,而在子类里可以重写父类的方法,每个子类重写的代码又不同,自然表现的形式就不一样
如果用父类的变量去引用不同的子类对象,在调用相同的方法的时候得到的结果就和表现形式就不一样了,这就是多态
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"); }}