我很難理解抽象方法的概念以及如何正確使用它們。正確使用抽象方法
基本上,我被指示編寫一個抽象超類「外星人」和2個子類「火星人和星期六」的代碼,在這些類中存在invade()方法,該方法應該接受外星人的名字作爲參數攻擊並且不返回值。
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;
abstract class Alien
{
private String planet;
private String age;
private String name;
private String skinColor;
private String alienPower;
public Alien(String planet, String age, String name, String skinColor, String alienPower)
{
this.planet=planet;
this.age=age;
this.name=name;
this.skinColor=skinColor;
this.alienPower=alienPower;
}
public abstract void invade(String planetName);
public String toString()
{
return name + " is from " + planet + ", is " + age + " years old, " + " has " + skinColor + " skin, and has the ability " + alienPower ;
}
}
class Martian extends Alien {
public Martian(String p, String a, String n, String s, String ap) {
super(p,a,n,s,ap);
}
@Override
public void invade(String strategy, String planetName) {
System.out.println("I am a Martian " + strategy + planetName);
}
}
class Saturner extends Alien {
public Saturner(String p, String a, String n, String s, String ap) {
super(p,a,n,s,ap);
}
public void invade(String strategy, String planetName) {
System.out.println("I am a Saturner " + strategy + planetName);
}
}
public class TestAlien {
public static void main(String[]args) {
ArrayList<Alien> alienList = new ArrayList<>();
List<String> planets = Arrays.asList(new String[] {"Earth", "June", "Mercury", "Venus", "Neptune"});
List<String> methods = Arrays.asList(new String[] {"shooting missiles at", "polluting the water systems of", "burning", "flooding"});
alienList.add(new Martian("Mars", "148", "Zornok", "red", "Read minds"));
alienList.add(new Saturner("Saturn", "89", "Hookman", "pitch black ", "Go invisible"));
alienList.add(new Martian("Mars", "18", "Guthrax", "gray", "Teleport"));
alienList.add(new Saturner("Saturn", "300", "Lamron", "blue", "Fly\n"));
int i = 0;
for (Alien al : alienList) {
System.out.println("Alien race: " + al.getClass().getName() + " || description = " + al.toString());
al.invade(methods.get(i) al.invade(planets.get(i));
i++;
}
對於簡單情況,您可以使用字符串,但是從良好的靈活設計角度來看,您必須將策略相關行爲封裝在單獨的類中。你將來可能有不同的策略。我再次編輯了我的答案,希望這會有所幫助。 –
你可以看看我編輯的代碼在原來的帖子和評估它,我添加策略的入侵方法,並添加了一些東西到ArrayList的驅動程序 –
@KelOkekpe你可以很好地起訴簡單的字符串,但正如我所說將不會靈活的設計來適應未來的變化,我編輯了我的答案,幷包括我所說的結構。希望它會有所幫助。歡呼和快樂的學習。 –