【发布时间】:2017-12-24 16:45:08
【问题描述】:
我写了一个简单的接口继承示例来说明我想要做什么。
interface Fruit{
public void taste();
}
class Banana implements Fruit {
public String name = "Banana";
public void taste(){
System.out.println("yummy banana!");
}
class Strawberry implements Fruit {
public String name = "Strawberry";
public void taste(){
System.out.println("yummy strawberry!");
}
}
class Lunch<Fruittype implements Fruit> {
public Fruittype fruit;
public void tasteit() {
System.out.println("I'm going to eat a"+ fruit.name + "!" );
// error: name cannot be resolved or is not a field
fruit.taste();
}
}
class exec {
public static void main(String[] args) {
Lunch<Banana> bananalunch = new Lunch<>;
bananalunch.fruit = new Banana();
bananalunch.tasteit();
}
}
所以 Banana 和 Strawberry 正在实施 Fruit。在午餐类中,我试图调用水果名称及其函数 taste(); 虽然调用函数味道很好,但我不能调用名称(请参阅:评论中的错误)
想要的输出: 我要吃香蕉! 好吃的香蕉!
就像我说的,美味的香蕉有效,但名称无法解析。我试图声明 "public String name = "default"";在水果界面。然后你可以调用它,但它总是说“默认”而不是实际类中的名称。
有没有办法获得实现接口的泛型类型的成员? 附:我需要这样做,当然这段代码只是为了表示,但我有一个更大更复杂的代码,我在其中遇到了这个问题——如果没有必要,我不想重组它。
提前谢谢你!
【问题讨论】:
-
我会在接口中添加一个
getName()方法,并在该接口的实现中实现标准的getter/setter 方法。 (当然还要将name设为私有。)
标签: java class variables inheritance interface