新手Java程序员在这里......
所以我有这个超类:
public abstract class Animal
{
public abstract String attack(Animal entity);
}
然后我有了这个子类:
public class Dog extends Animal
{
protected int something;
public int getSomething()
{
return something;
}
@Override
public String attack(Animal entity)
{
entity.getSomething();
//THIS RIGHT HERE
}
我不是在问为什么这不起作用,因为我问我将如何访问该子类中的那些方法和实例。我应该在攻击方法中创建Dog的新实例并将实体分配给新创建的实例吗?实现这个目标的“正确”方法是什么?
答案 0 :(得分:1)
您要做的是在攻击(Animal实体)方法的实现中对类Animal的实例调用方法getSomething()。
这显然不起作用,因为这个方法没有为Animal类定义。我相信你想要狗可以攻击任何类型的动物,反之亦然。那么你要做的是将方法添加到Animal:
public abstract class Animal {
public abstract String getSomething();
//rest
}
然后你必须在每个动物的子类中覆盖该方法。或者,如果可能,在您的用例中,在动物类的属性处直接实现getSomething()方法:
public abstract class Animal {
private String something;
public String getSomething() {
return this.something;
}
//rest
}
请再次考虑属性的可见性受保护。如果某些东西受到保护,那么同一个包中的每个类实例都可以在没有getter的情况下访问和修改它。
答案 1 :(得分:0)
狗与动物有一种关系。这反过来也不相反。因此,dog中定义的自定义方法不能在其父类中使用,除非它是重写方法