我很难理解抽象方法的概念以及如何正确使用它们。正确使用抽象方法
基本上,我被指示编写一个抽象超类“外星人”和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你可以很好地起诉简单的字符串,但正如我所说将不会灵活的设计来适应未来的变化,我编辑了我的答案,并包括我所说的结构。希望它会有所帮助。欢呼和快乐的学习。 –