使用了三个私有公共变量,使用了两个接口,继承,多态也都用到。不使用集合,仅用第二季知识打造的答答租车。
Car父类
package com.sss;
/**
* @Author Spv
* @Date 2016年7月20日 上午8:18:21
* @Version 1.0
*
*/
public abstract class Car {
private int id;
private String name;
private int price; //定义三个共性私有量
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
} //set跟get取得私有量的访问方式
public abstract void getMessage(); //定义抽象显示信息方法
}
三个子类
package com.sss;
/**
* @Author Spv
* @Date 2016年7月20日 上午8:32:47
* @Version 1.0
*
*/
public class Cargo extends Car implements IPCarryGoods{
private int weight; //增加载重车特有载重变量
@Override
public int carryGoods(){
return weight; //重写接口的载货函数,返回载货量
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public Cargo(int id,String name,int weight,int price){
this.setId(id);
this.setName(name);
this.setWeight(weight); //构造方法,设置车的属性,载重车增加重量赋值,后面同理。
this.setPrice(price);
}
@Override
public void getMessage(){
System.out.println(getId()+"\t"+getName()+"\t "+"载货:"+weight+"吨"+"\t"+getPrice());
//重写父类的显示信息函数,增加载货量
}
}
package com.sss;
/**
* @Author Spv
* @Date 2016年7月20日 上午8:23:07
* @Version 1.0
*
*/
public class PersonCar extends Car implements IPCarryPeople{
private int person; //载人类车增加载人变量
@Override
public int carryPeople(){
return person; //重写载人接口函数,返回载人数
}
public int getPerson() {
return person;
}
public void setPerson(int person) {
this.person = person;
}
public PersonCar(int id,String name,int person,int price){
this.setId(id);
this.setName(name);
this.setPerson(person);
this.setPrice(price);
}
@Override
public void getMessage(){
System.out.println(getId()+"\t"+getName()+"\t"+"载人:"+person+"人"+"\t "+getPrice());
//重写父类显示函数,增加载人量显示。
}
}
package com.sss;
/**
* @Author Spv
* @Date 2016年7月20日 上午8:36:32
* @Version 1.0
*
*/
public class Pickup extends Car implements IPCarryGoods,IPCarryPeople{ //实现双接口
private int person;
private int weight; //增加载人载货变量
@Override
public int carryGoods(){
return weight; //重写载货接口返回载重量
}
@Override
public int carryPeople(){
return person; //重写载人接口返回载人数
}
public int getPerson() {
return person;
}
public void setPerson(int person) {
this.person = person;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
public Pickup(int id,String name,int person,int weight,int price){
this.setId(id);
this.setName(name);
this.setPerson(person);
this.setWeight(weight);
this.setPrice(price);
}
@Override
public void getMessage(){
System.out.println(getId()+"\t"+getName()+"\t"+"载人:"+person+"人"+"\t"+"载货:"+weight+"吨"+"\t"+getPrice());
//重写父类显示函数,增加载人载重显示
}
}
两个接口
package com.sss;
/**
* @Author Spv
* @Date 2016年7月20日 上午11:03:49
* @Version 1.0
*
*/
public interface IPCarryGoods {
public abstract int carryGoods(); //载货接口
}
package com.sss;
/**
* @Author Spv
* @Date 2016年7月20日 上午10:49:26
* @Version 1.0
*
*/
public interface IPCarryPeople {
public abstract int carryPeople(); //载人接口
}
主程序
package com.sss;
import java.util.Scanner;
/**
* @Author Spv
* @Date 2016年7月20日 上午8:40:03
* @Version 1.0
*
*/
public class SystemSpv {
static Car car1=new PersonCar(1, "奔驰", 5, 600); //这里我随便定义的名字跟重量什么的,当时状态好,不想去
static Car car2=new PersonCar(2, "宝马", 5, 300); //翻具体视频上什么值,灵感来了就顺着写下去,程序员的必杀技啊!
static Car car3=new Cargo(3, "解放", 50, 500);
static Car car4=new Cargo(4, "红牛", 80, 800);
static Car car5=new Pickup(5, "皮卡", 3, 40, 200);
static Car car6=new Pickup(6, "卡卡", 4, 10, 400); //多态赋值
static Car[] cars={car1,car2,car3,car4,car5,car6}; //实例化数组
static void show(){ //定义显示函数
for(Car each:cars){ //数组遍历的for each用法,一种可以简化遍历数组的方式。
each.getMessage(); //调用显示函数
}
}
public static int getPeopleSum(Object o) { //定义获取总人数的方法
if (o instanceof IPCarryPeople) { //判断是否有载人量instance of是一种向下转换的类型判断函数,理解一下就好
int peopleSum = 0;
peopleSum += ((IPCarryPeople) o).carryPeople(); //有就进入计算,这里是强制类型转换,以方便调用返回人数的函数
return peopleSum;
} else {
return 0; //不具有载人量,返回值为0
}
}
public static int getWeightSum(Object o) { // 这一部分同上 你们懂的
if (o instanceof IPCarryGoods) {
int WeightSum = 0;
WeightSum += ((IPCarryGoods) o).carryGoods();
return WeightSum;
} else {
return 0;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("欢迎光临spv租车系统,租车请按1,返回请按其它。");
int button=sc.nextInt();
if(button==1){
System.out.println("可租车项如下:");
System.out.println("序号"+"\t"+"名字"+"\t"+"规格"+"\t"+" 价格");
show(); //我把方法都抽象成函数了,直接调用。
System.out.println("请选择你要租车的数量:");
int peopleSum=0;
int weightSum=0;
int priceSum=0;
int num=sc.nextInt();
for(int j=1;j<=num;j++){
System.out.println("请输入第"+j+"辆车的序号");
int id=sc.nextInt();
peopleSum+=getPeopleSum(cars[id-1]); //同上计算总量直接调用函数
weightSum+=getWeightSum(cars[id-1]);
priceSum+=cars[id-1].getPrice();
}
System.out.println("请输入租车天数:"); //这一部分都很easy你们能懂的。
int day=sc.nextInt();
priceSum=priceSum*day;
System.out.println("您的账单:");
System.out.println("共租车"+num+"辆,"+"共租车"+day+"天");
System.out.println("一共可载"+peopleSum+"人,"+"一共载货"+weightSum+"吨");
System.out.println("总价格"+priceSum+"元");
sc.close(); //关闭键盘输入
} else{
System.out.println("即将退出系统");
}
}
}