我正在嘗試面向物件編程的過去紙質問題。我需要將用戶輸入值傳遞給抽象類中的私有變數。但是由于無法實體化抽象類,我無法將用戶輸入傳遞給抽象類“Room”中的變數。那么如何將用戶輸入值傳遞給抽象類中的私有變數?我不知道用戶會選擇哪種房型(標準或豪華)。所以我也不能實體化子類。任何人都可以幫忙嗎?注意:所有變數都應該通過 set 和 get 方法訪問。
public abstract class Room{
private char roomType;
private int roomNumber;
private int numOfDays;
private char roomPackageType;
public void setRoomType(char roomType){
this.roomType = roomType;
}
public char getRoomType(){
return this.roomType;
}
public void setRoomNumber(int roomNumber){
this.roomNumber = roomNumber;
}
public int getRoomNumber(){
return this.roomNumber;
}
public void setNumOfDays(int numOfDays){
this.numOfdays = numOfDays;
}
public int getNumOfDays(){
return this.numOfdays;
}
public void setRoomPackageType(char roomPackageType){
this.roomPackageType = roomPackageType;
}
public char getRoomPackageType(){
return this.roomPackageType;
}
public abstract void callPayment(int numOfDays,String customerType,String roomPackageType);
}
public class Standard extends Room{
public abstract void callPayment(int numOfDays,String customerType,String roomPackageType){
//code
}
}
public class Deluxe extends Room{
public abstract void callPayment(int numOfDays,String customerType,String roomPackageType){
//code
}
}
import java.util.Scanner;
import java.util.*;
public class Q2{
public static void main(String[] args){
Customer c1 = new Customer();
Scanner sc = new Scanner(System.in);
System.out.println("Please specify whether you are a local customer(L) or a foreign customer(F)");
char customerType = sc.next().charAt(0);
if(customerType != 'L' && customerType != 'F')
throw new InputMismatchException("Input must be either 'F' or 'L'");
c1.setCustomerType(customerType);
System.out.println("Enter your NIC number");
String idNumber = sc.nextLine();
c1.setIdNumber(idNumber);
System.out.println("Enter the package you would like to purchase");
char roomPackageType = sc.next().charAt(0);
Room.setRoomPackageType(roomPackageType);
}
}
uj5u.com熱心網友回復:
您可以嘗試child classes在roomPackageType被選中的基礎上進行有條件的實體化,因為抽象類方法只能通過繼承它的類訪問。
System.out.println("Enter the package you would like to purchase('D' for Deluxe or 'S' for Standard)");
char roomPackageType = sc.next().charAt(0);
if(roomPackageType.equals ('D')) {
Deluxe dlx = new Deluxe();
dlx.setRoomPackageType(roomPackageType);
}
else if(roomPackageType.equals('S')) {
Standard std = new Standard();
std.setRoomPackageType(roomPackageType);
}
else{
System.out.println("Invalid Room Package!");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/405421.html
標籤:
上一篇:受推送影響的建構式中的陣列參考
下一篇:如何使泛型和默認值協同作業
