感觉还是有很多不足的地方希望大神可以帮我看看
package Ns;
public abstract class Cars {
public int id; //定义车辆序号
public String name; //车辆的名称
public double price; //定义价格
public int busload; //载客量
public int weigth; //载重
public int type; // 0为载人类型的车 1为载货的车
public Cars(){
//无参的构造方法
}
public Cars(int id,String name,double price,int busload,int weigth,int type){ //有参的构造方法
this.id=id;
this.name=name;
this.price=price;
this.busload=busload;
this.weigth=weigth;
this.type=type;
}
public abstract void show(); //定义抽象方法
// 如果一个类包含抽象方法,那么该类必须是抽象类。
// 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
// 继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
}
//定义汽车类
//在同一个类中只需要一个public类,切必须于类名相同
class bus extends Cars{
public bus(int id,String name,double price,int busload,int type){
this.id=id;
this.name=name;
this.price=price;
this.busload=busload;
this.type=type;
}
public void show(){
System.out.println(id+"\t"+name+"\t"+price+"元/天 "+"\t载人:"+busload+"人");
}
};
//定义即可载人也可以载货
class Pick extends Cars{
public Pick(){ }
public Pick(int id,String name,double price,int busload,int weigth,int type){
super(id,name,price,busload,weigth,type); //直接使用父类的变量
// this和super差异
// 1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)
// 2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)
// 3)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)
// 4)this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
// 5)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
// 6)super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
// 7)super()和this()均需放在构造方法内第一行。
// 8)尽管可以用this调用一个构造器,但却不能调用两个。
// 9)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
// 10)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
// 11)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
}
public void show(){
System.out.println(id+"\t"+name+"\t"+price+"元/天 "+"\t载人"+busload+"\t载货:"+weigth+"吨");
}
}
class name extends Cars{
public void show() {
System.out.println("序号"+"\t名称"+"\t价格"+"\t\t载人"+"\t载重");
}
}
package Ns;
import java.util.Scanner;
public class Texts {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cars[] an={
new name(),
new bus(1, "奥迪", 200, 4,0),
new bus(2, "公交车", 600, 30,0),
new Pick(3, "拖拉机", 300, 2, 5,1),
new Pick(4, "卡车", 300, 4, 20,1),
};
Scanner in=new Scanner(System.in);
int ans=0;;
double sumprice=0;
int asn=0;
int zhuo=0;
int count=0;
String names="";
String namesn="";
System.out.println("您是否要用哒哒租车系统 1是 0否");
int a=in.nextInt();
if(a==1){
System.out.println("您可租车的类型及价格表");
for(Cars cr:an){ //相当于C# foreach,使用foreach可以迭代数组或者一个集合对象。
cr.show(); //遍历所有的车情况
}
System.out.println("请您选择要租车的数量");
int b=in.nextInt();
int ID[]=new int[b]; //用于存储车辆的数量
for (int i = 1; i <= ID.length; i++) {
System.out.println("请您输入第"+i+"辆车序号");
ans=in.nextInt();
if (an[ans].type==0) {
asn=asn+an[ans].busload; //计算载人数
sumprice=sumprice+an[ans].price; //计算载人租车价格
names =names+ an[ans].name+","; //获取名称
}
if(an[ans].type==1){
zhuo=zhuo+an[ans].weigth; //计算载货数
sumprice=sumprice+an[ans].price; //计算载人租车价格
namesn =namesn+ an[ans].name+",";
}
}
System.out.println("请输入租车的天数");
count=in.nextInt();
System.out.println("您的账单详情如下.........");
System.out.println("*******可以载人的车有*******");
System.out.println(names+"共载"+asn+"人");
System.out.println("*******可以载货的车有*******");
System.out.println(namesn+"共载"+zhuo+"吨");
System.out.println("共计消费"+sumprice*count+"元");
in.close();
}
}
}