/*
汽車類
/
public abstract class MotoVehicle {
/
}
public MotoVehicle(String no,String brand,int perRend){
this.no=no;
this.brand=brand;
this.perRend=perRend;
}
}
/*
客車類
*/
public class Bus extends MotoVehicle{
private int seatCount;//座位數
public int getSeatCount() {
return seatCount;
}
public void setSeatCount(int seatCount) {
this.seatCount = seatCount;
}
public Bus(){
}
public Bus(String no,String brand,int perRent,int seatCount){
super(no,brand,perRent);//調用父類的構造函數
this.seatCount=seatCount;
}
/*
橋車類
*/
public class Car extends MotoVehicle{
private String type;//型號
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Car(){
}
public Car(String no,String brand,int perRent,String type){
super(no,brand,perRent);//調用父類的構造函數
this.type=type;
}
/*
/*
汽車業務類
/
public class Motooperation {
public MotoVehicle MotoleaseOut(String MotoType){
MotoVehicle moto=null;;
if(MotoType.equals("橋車")){
moto=new Car();//多態轉型 類型提升 向上轉型 把子類提升為父類
moto.leaseoutFlow();
}else if(MotoType.equals("客車")){
moto=new Bus();//多態轉型 類型提升 向上轉型 把子類提升為父類
moto.leaseoutFlow();
}
return moto;
}
}
/
汽車租賃管理類
*/
import java.util.Scanner;
public class RentMgrSys {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
Motooperation motoMrs=new Motooperation();
MotoVehicle moto=null;
System.out.println("歡迎來到汽車租賃公司!");
System.out.print("請輸入要租賃的汽車類型: ");
System.out.print("1.橋車 2.客車");
int choose=input.nextInt();//汽車類型
String MotoType=null;
if(choose==1){
MotoType="橋車";
}else if(choose==2){
MotoType="客車";
}
moto=motoMrs.MotoleaseOut(MotoType);//獲取租賃的汽車類型
System.out.print("請輸入要租賃的天數");
int days=input.nextInt();
float money=moto.calRent(days);//租賃費用
System.out.println("分配給你的汽車牌號是:"+moto.getNo());
System.out.println("你需要支付的費用:"+money+"元");
input.close();
}
}
這句看不懂 float money=moto.calRent(days); moto是父類Motooperation的對象為什麼調用的是子類的calRent()方法
moto是MotoVehicle類型的變量啊,motoMrs.MotoleaseOut(MotoType)得到的是MotoVehicle類的子類的對象。變量是在棧內存中的,對象是在堆內存中的。
moto變量能調用的方法由MotoVehicle類型決定,而具體怎麼調用還要看子類對象,如果重寫了calRent()方法就用子類的,沒有就去找父類。
這是方法的重載解析。