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");
    }

}

 



posted @ 2024-12-17 23:44  小马哥007  阅读(2)  评论(0编辑  收藏  举报