【继承与多态的应用】

102 阅读2分钟

一个机动车管理系统中有以下类的设计: 
机动车类:
汽车类:奔驰车、宝马车
摩托车类:雅马哈摩托、宝马摩托
所有的车都有如下信息:
属性:品牌、价格、状态(注销/运行)
行为:显示信息(品牌、价格、状态)
现在要求为所有“宝马车系”的汽车增加一个GPS功能
请设计出上述的类结构,并用代码实现机动车管理系统统一管理显示机动车信息

创建一个抽象的机动车类

package stu.day08;

public abstract class Vehicle {

    private String brand;
    //品牌
    private double price;
    //价格
    private boolean status;
    //状态(注销/运行)
    public Vehicle(String brand, double price, boolean status) {
        this.brand = brand;
        this.price = price;
        this.status = status;
    }

    //状态
    // 显示车辆信息
    abstract void displayInfo();

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    @Override
    public String toString() {
        return "Vehicle{" +
                "brand='" + brand + ''' +
                ", price=" + price +
                ", status=" + status +
                '}';
    }
}

创建一个GPS接口

    
package stu.day08;

public interface GPS {
    void ShowGPSInfo();
}

创建摩托车类

package stu.day08;

public class MoTuo extends Vehicle{
    public MoTuo(String brand, double price, boolean status) {
        super(brand, price, status);
    }

    @Override
    void displayInfo() {

    }
}

创建一个汽车类

package stu.day08;

public class QiCheIml extends Vehicle{
    public QiCheIml(String brand, double price, boolean status) {
        super(brand, price, status);
    }

    @Override
    void displayInfo() {
//        System.out.println("汽车品牌:" + super.getBrand());
//        System.out.println("汽车价格:" + super.getPrice());
//        System.out.println("汽车状态:" + ( super.isStatus()? "运行" : "注销"));

    }

    //    @Override
//    void GPS();
}

创建汽车的子类:奔驰车、宝马车

1,奔驰
package stu.day08;

public class BenCh extends QiCheIml{
   public BenCh(String brand, double price, boolean status) {
       super(brand, price, status);
   }

   @Override
   void displayInfo() {
       super.displayInfo();
       System.out.println("汽车品牌:" + super.getBrand());
       System.out.println("汽车价格:" + super.getPrice());
       System.out.println("汽车状态:" + ( super.isStatus()? "运行" : "注销"));
   }
}
   
2,宝马
package stu.day08;

public class BaoMa extends QiCheIml implements GPS {

   public BaoMa(String brand, double price, boolean status) {
       super(brand, price, status);
   }


//    public BaoMa(String brand, double price, boolean status) {
//        super(brand, price, status);
//    }

   @Override
   void displayInfo() {
       System.out.println("汽车品牌:" + super.getBrand());
       System.out.println("汽车价格:" + super.getPrice());
       System.out.println("汽车状态:" + ( super.isStatus()? "运行" : "注销"));

   }

   @Override
   public void ShowGPSInfo() {
       System.out.println("这是一辆宝马汽车,GPS 功能已启用");
   }
}
   

创建摩托车的子类:

    
1,宝马摩托车
package stu.day08;

public class BaoMaMo extends MoTuo implements GPS  {

    public BaoMaMo(String brand, double price, boolean status) {
        super(brand, price, status);
    }

    @Override
    void displayInfo() {
        System.out.println("摩托车品牌:" + super.getBrand());
        System.out.println("摩托车价格:" + super.getPrice());
        System.out.println("摩托车状态:" + ( super.isStatus()? "运行" : "注销"));
    }

    @Override
    public void ShowGPSInfo() {
        System.out.println("这是一辆宝马摩托车,GPS 功能已启用");
    }

}
    
    
2,雅马哈摩托车

package stu.day08;

public class YaMaMo extends MoTuo{
    public YaMaMo(String brand, double price, boolean status) {
        super(brand, price, status);
    }

    @Override
    void displayInfo() {
        super.displayInfo();
        System.out.println("摩托车品牌:" + super.getBrand());
        System.out.println("摩托车价格:" + super.getPrice());
        System.out.println("摩托车状态:" + ( super.isStatus()? "运行" : "注销"));
    }
}

定义一个车辆管理类

package stu.day08;

//定义车辆平台
public class VehicleManagementSystem {
    // 主方法
    public static void main(String[] args) {
        // 创建车辆对象数组
        Vehicle[] vehicles = {
                new BenCh("奔驰",500000,true),
                new BaoMa("宝马",800000,true),
                new YaMaMo("雅马哈",200000,false),
                new BaoMaMo("宝马摩托",300000,false),
        };
        // 遍历车辆数组
        for (Vehicle vehicle : vehicles) {
            // 调用显示车辆信息的方法
            vehicle.displayInfo();
            // 判断是否为GPS类型,如果是则调用显示GPS信息的方法
            if (vehicle instanceof GPS){
                ((GPS) vehicle).ShowGPSInfo();
            }
            System.out.println();
        }
    }
}