综合练习

使用所学的封装、继承、多态、抽象、接口来完成一个汽车查询系统。

需求描述:共有3种类型的汽车:小轿车、大巴车、卡车,其中小轿车是4座、大巴车是53座、卡车是2座,要求使用封装、继承、抽象来完成车辆的定义。

可以对汽车信息作出修改,卡车可以运货但是载重量不能超过12吨,使用自定义异常来处理错误,小轿车和大巴车没有此功能,要求使用接口来实现。

具体实现代码:

public interface Container {
	public int getweight();
}
public abstract class Car {
	private String name;
	private String color;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public abstract String seatNum();
	public Car(String name, String color) {
		super();
		this.name = name;
		this.color = color;
	}
}
public class Bus extends Car {

	public Bus(String name, String color) {
		super(name, color);
	}

	@Override
	public String seatNum() {
		// TODO Auto-generated method stub
		return "53座";
	}
}
public class Truck extends Car implements Container {
	private int weight;
	public Truck(String name,String color,int weigth) {
		super(name,color);
		this.weight = weigth;
	}
	@Override
	public String seatNum() {
		// TODO Auto-generated method stub
		return "2座";
	}

	@Override
	public int getweight() {
		// TODO Auto-generated method stub
		return this.weight;
	}
}
public class Sedan extends Car {

	public Sedan(String name, String color) {
		super(name, color);
	}

	@Override
	public String seatNum() {
		// TODO Auto-generated method stub
		return "4座";
	}
}
public class CarException extends Exception {
	public CarException(String error) {
		super(error);
	}
}
import java.util.Scanner;

public class Test {
	private static Scanner scanner;
	private static Sedan sedan;
	private static Bus bus;
	private static Truck truck;
	private static Car[] cars;
	static {
		scanner = new Scanner(System.in);
		sedan = new Sedan("小轿车","黑色");
		bus = new Bus("大巴车","绿色");
		truck = new Truck("卡车","蓝色",2);
		cars = new Car[3];
		cars[0] = sedan;
		cars[1] = bus;
		cars[2] = truck;
	}
	
	public void showCars() {
		System.out.println("车辆名称\t\t车辆颜色\t\t座位数\t\t载重量");
		Car car = null;
		for(int i = 0; i < cars.length;i++) {
			car = cars[i];
			if(car instanceof Sedan) {
				Sedan sedan = (Sedan)car;
				System.out.println(sedan.getName()+"\t\t"+sedan.getColor()+"\t\t"+sedan.seatNum());
			}
			if(car instanceof Bus) {
				Bus bus = (Bus)car;
				System.out.println(bus.getName()+"\t\t"+bus.getColor()+"\t\t"+bus.seatNum());
			}
			if(car instanceof Truck) {
				Truck truck = (Truck)car;
				System.out.println(truck.getName()+"\t\t"+truck.getColor()+"\t\t"+truck.seatNum()+"\t\t"+truck.getweight() + "吨");
			}
			System.out.println("1.小轿车\t2.大巴车\t3.卡车");
			System.out.println("请输入您要修改的车辆。");
			int num = scanner.nextInt();
			switch(num){
				case 1:
					update("sedan");
					break;
				case 2:
					update("bus");
					break;
				case 3:
					update("truck");
					break;
				default:
					Syste.out.println("您输入的数字有误,请重新输入。");
					showCars();
					break;
			}
		}
	}

	public void update(String type){
		String name = null;
		String color = null;
		System.out.println("请输入车辆名称");
		name = scanner.next();
		System.out.println("请输入车辆颜色");
		color = scanner.next();
	
		//小轿车
		if(type.equals("sedan")){
			/*System.out.println("请输入车辆名称");
			name = scanner.next();
			System.out.println("请输入车辆颜色");
			color = scanner.next();*/
			Sedan sedan = new Sedan(name,color);
			cars[0] = sedan;
		}
		//大巴车
		if(type.equals("大巴车")){
			/*System.out.println("请输入车辆名称");
			name = scanner.next();
			System.out.println("请输入车辆颜色");
			color = scanner.next();*/
			Sedan sedan = new Sedan(name,color);
			cars[0] = sedan;
		}
		//卡车
		if(type.equals("truck")){
			/*System.out.println("请输入车辆名称");
			name = scanner.next();
			System.out.println("请输入车辆颜色");
			color = scanner.next();*/
			System.out.println("请输入车辆的载重量");
			int weight = scanner.nextInt();
			if(weight > 12){
				try{
					throw new CarException("卡车的载容量不能超过12吨");
				}catch(CarException e ){
					e.printStackTrace();
					return;
				}
			}
			Truck truck = new Truck(name,color,weight);
			cars[2] = truck;
		}
		showCars();
	}
	public static void main(String[] args) {
		Test test = new Test();
		test.showCars();
	}
}

返回目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值