[英]how can i write a user input based constructor?
我想要多個類,並希望根據用戶輸入構造一個類。 具體來說,我正在編寫文字冒險游戲,並為玩家可以使用的每種“玩家類別”提供了一個類別。 我的三個班級擴展了父級“統計”班級。
這是我的代碼的一部分:(我使用打印構造函數來提高書寫效率)
switch (answer) {
case 1:
{
adv.print("you are a mage");
mainCharacterMage mainCharacter = new mainCharacterMage();
break;
}
case 2:
{
adv.print("you are an assasin");
mainCharacterAssasin mainCharacter = new mainCharacterAssasin();
break;
}
case 3:
{
adv.print("you are a fighter");
mainCharacterFighter mainCharacter = new mainCharacterFighter();
break;
}
default:
adv.print("error wrong answer");
break;
}
String printThis = Integer.toString(mainCharacter.getHealth());
adv.print("your health is "+printThis);
我假設這三個子類的父類稱為MainCharacter
。
首先, mainCharacter
必須為MainCharacter
類型,除非您願意在每次要使用mainCharacter
時進行instanceof
檢查和強制轉換。 每一個動作,你需要做上mainCharacter
將需要加以界定MainCharacter
,而不是在子類。
其次,你需要聲明mainCharacter
的外部switch
,然后在把它定義switch
:
MainCharacter mainCharacter; // Declare it outside
switch (answer) {
case 1:
{
adv.print("you are a mage");
mainCharacter = new MainCharacterMage(); // Then define it on the inside
break;
}
case 2:
{
adv.print("you are an assasin");
mainCharacter = new MainCharacterAssasin();
break;
}
case 3:
{
adv.print("you are a fighter");
mainCharacter = new MainCharacterFighter();
break;
}
default:
adv.print("error wrong answer");
break;
}
可能是這樣的
public interface Character {
// here is all common method of your Character
}
public class CharacterFactory {
private class CharacterMage implements Character {
// here is implementation
}
private class CharacterAssasin implements Character {
// here is implementation
}
public Character createCharacter(String characterName) {
switch (characterName) {
case "Mage":
return new CharacterMage();
case "Assasin":
return new CharacterAssasin();
default:
throw new IllegalArgumentException("Incorrect character type " + characterName);
}
}
根據類之間的差異,可以僅使用一個MainCharacter class
以及每個類的不同工廠方法來完成此操作。
例如,像這樣設置MainCharacter類:
public class MainCharacter{
public int health;
public int damage;
// etc.
public static MainCharacter buildMage(){
health = 5;
damage = 20;
// etc.
}
public static MainCharacter buildAssassin(){
health = 10;
damage = 10;
// etc.
}
public static MainCharacter buildMage(){
health = 20;
damage = 5;
// etc.
}
}
然后像這樣創建MainCharacter:
switch (answer) {
case 1:
{
adv.print("you are a mage");
MainCharacter main_character = MainCharacter.buildMage();
break;
}
case 2:
{
adv.print("you are an assasin");
MainCharacter main_character = MainCharacter.buildAssassin();
break;
}
case 3:
{
adv.print("you are a fighter");
MainCharacter main_character = MainCharacter.buildFighter();
break;
}
注意:這減少了必須創建的類的數量,但是僅當類之間的差異只是不同的初始統計信息時才合適。 如果不同的類實際上具有本質上不同的方法,則需要繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.