对于我的任务,我应该,"编写父类和子类的代码,并编写一个驱动程序类来演示应用程序的方法和变量。在您的驱动程序中,包含一个数组来存储所有子类的对象。使用循环打印出每个对象的相关值和/或使用其方法。"
嗯,这是我到目前为止所做的:
狗(抽象类):
package objectsofaffection;
public abstract class Dog extends Test {
static String name;
static String age;
static String coatColor;
public abstract void name();
public abstract void age();
public abstract void coatColor();
}
DogBetty:
package objectsofaffection;
public class DogBetty extends Dog {
public DogBetty() {
name();
age();
coatColor();
}
@Override
public void name() {
System.out.println("Dog Name: Betty");
}
@Override
public void age() {
System.out.println("Age: 11 years");
}
@Override
public void coatColor() {
System.out.println("Coat Color: Brown");
}
}
DogCarl:
package objectsofaffection;
public class DogCarl extends Dog {
public DogCarl() {
name();
age();
coatColor();
}
@Override
public void name() {
System.out.println("Dog Name: Carl");
}
public void age() {
System.out.println("Age: 2 months");
}
public void coatColor() {
System.out.println("Coat Color: Black");
}
}
DogJoe:
package objectsofaffection;
public class DogJoe extends Dog {
public DogJoe() {
name();
age();
coatColor();
}
@Override
public void name() {
System.out.println("Dog Name: Joe");
}
public void age() {
System.out.println("Age: 6 years");
}
public void coatColor() {
System.out.println("Coat Color: Spotted Black and White");
}
}
DogMollie:
package objectsofaffection;
public class DogMollie extends Dog {
public DogMollie() {
name();
age();
coatColor();
}
@Override
public void name() {
System.out.println("Dog Name: Mollie");
}
public void age() {
System.out.println("Age: 3 years");
}
public void coatColor() {
System.out.println("Coat Color: Black, Brown, White mix.");
}
}
测试(驱动程序类):
package objectsofaffection;
public class Test {
@SuppressWarnings("unused")
public static void main(String[] args) {
DogBetty betty = new DogBetty();
System.out.println(); //space
DogJoe joe = new DogJoe();
System.out.println(); //space
DogCarl carl = new DogCarl();
System.out.println(); //space
DogMollie mollie = new DogMollie();
System.out.println(); //space
}
}
那么,我怎么可能使用数组呢?请帮助。
答案 0 :(得分:2)
除了萨尔曼接受的答案之外,我必须指出你的父类声明了3个静态变量。静态变量在类的所有实例之间共享,因此在设置这些实例时,每个dog实例都将具有相同的名称,年龄,颜色。幸运的是,这些变量从未设置过,所以它们只是说明你对它们的目的和“静态”的使用感到困惑。另外,请注意您的孩子班级的每个人都做同样的事情。这是一个提示,您应该将该逻辑移动到父类中。每个子类构造函数都应调用super(),超类构造函数将调用相同的3个方法。
答案 1 :(得分:1)
首先,您没有为每只狗制作子类,抽象类表示类型,子类表示子类型。因此,如果Dog
是父类,那么您的子类可以是品种,也可以是您制作对象的每只狗。
Dog
- > germanShepard extends Dog
- > germanShepard dogMollie = new germanShepard();
然后你可以使用germanShepard类型的ArrayList:ArrayList<germanShepard> dogs = new ArrayList<germanShepard>();
dogs.add(dogMollie);
ArrayList是动态数据结构,因此它会根据您的需要增长
但是如果你想使用数组,
germanShepard[] dogs;
dogs =new germanShepard[10];
dogs[0] = new germanShepard(name,age,coatColor);