我搜索这个网站,其他人几个小时都无济于事。目前,我正致力于继承并且在路上遇到了麻烦。我有一个叫做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类中的一个方法,它是层次结构中直接位于它上面的类。
答案 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