从具有超类参数的方法中访问子类方法和实例

时间:2014-09-21 17:02:33

标签: java inheritance abstract subclassing

新手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的新实例并将实体分配给新创建的实例吗?实现这个目标的“正确”方法是什么?

2 个答案:

答案 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中定义的自定义方法不能在其父类中使用,除非它是重写方法