一个子类调用它的超类的方法(它也是一个子类)

时间:2016-02-29 22:24:18

标签: java inheritance subclassing

我搜索这个网站,其他人几个小时都无济于事。目前,我正致力于继承并且在路上遇到了麻烦。我有一个叫做Plant的超级类,它有一个名为Vegetable的子类和Flower。还有一个名为Tomato的子类,它扩展了Vegetable类,现在我的问题是我的Tomato类无法访问它上面任何类的方法。

基本上我问,如果C扩展B,B扩展A,为什么C在语法上不能在我的程序中从A或B访问公共方法?

public class Tomato extends Vegetable{

private String breed;

public Tomato(String o, int s, String b)
{
    super();
    breed = b;
}

public String getBreed()
{
    return breed;
}

public String toString()
{
    return "[Owner: " + getOwner() + " , Sprouts: " + getSprouts() 
            + " , Breed: " + getBreed() + "]";
}

public void water()
{
    if(breed.toLowerCase().contains("porterhouse"))
    {
        int numSprouts = getSprouts();
        setSprouts(numSprouts*3);
    }
} }

我在方法调用getOwner()和getSprouts()上收到错误,只有访问器方法。 getOwner()是工厂类中的公共方法,getSprout()是Vegetable类中的一个方法,它是层次结构中直接位于它上面的类。

3 个答案:

答案 0 :(得分:1)

如果我理解正确:番茄可以访问蔬菜植物的公共方法。

public class Plant {
    public void getPlant(){
         System.out.println("In Plant");
    }

    public static void main(String[] args) {
        Tomato tomato = new Tomato();
        tomato.getTomato();

    }
}


class Vegetable extends Plant{
    public void getVegetable(){
        System.out.println("In Vegetable");
    }

}

class Flower extends Plant{
    public void getFlower(){
        System.out.println("In Flower");
        getPlant();
    }
}

class Tomato extends Vegetable{
    public void getTomato(){
        System.out.println("In Tomato");
        getVegetable();
        getPlant();

    }
}

输出:

番茄

蔬菜

在植物中

答案 1 :(得分:0)

您要描述的是多级继承。 Here就是一个例子。是的,子类可以访问它的父母的任何方法,只要它们是公共的/受保护的。

答案 2 :(得分:-1)

您可以创建一个"桥接"在classess之间:

class A {
    public String getA() {
        return "A";
    }
}

class B extends A {

    @Override
    public String getA(){
        return super.getA(); //uses getA from A class
    }
}

class C extends B {
    @Override
    public String getA(){
        return super.getA();  //uses getA from B class
    }
}

测试:

public static void main(String... args) {

    A a = new C();
    System.out.println(a.getA());
}

打印:A