假设我有两个类(class)。
public class Banana extends Fruit{
public Banana() {
this.setTitle("Banana");
this.setSize("Medium");
this.setState("Rotten");
}
}
public class Sausage extends Meat{
public Sausage() {
this.setTitle("Sausage");
this.setSize("Medium");
this.setState("Rotten");
}
}
有没有办法引入一个可以保存通用设置的界面(可能使用默认方法)?两个原始扩展名都应保留。
我已经用 google 搜索了接口(interface)和默认方法大约一个小时,并在 Java 聊天服务器上询问了这个问题,但我仍然很困惑。
最佳答案
您不能直接执行此操作。我认为您在这里基本上要求的是多重继承,而这个概念似乎让 Java 语言设计者非常恼火。不过,您可以自己实现类似的东西。
假设您有一个界面Food
public interface Food {
void setTitle(String s);
void setSize(String s);
void setState(String s);
}
然后你可以这样做:
public class BaseFood implements Food {
private String title;
private String size;
private String state;
// setters and getters...
}
然后是这个:
public class Banana extends Fruit implements Food {
private BaseFood food = new Food();
public Banana() {
food.setTitle("Banana");
food.setSize("Medium");
food.setState("Rotten");
}
}
为了完整起见,这里是Sausage
,它与Banana
基本相同:
public class Sausage extends Meat implements Food {
private BaseFood food = new Food();
public Sausage() {
food.setTitle("Kielbasa");
food.setSize("Medium");
food.setState("Tasty");
}
}
这称为“委托(delegate)”,您将 Java 中某个接口(interface)的实现委托(delegate)给另一个对象,仅声明它实现一个公共(public)接口(interface),然后仅调用实际实现该接口(interface)的私有(private)实例上的方法。它基本上是手动多重继承。
很常见的是,我的 IDE (NetBeans) 会为我完成大部分工作。给定一个接口(interface)和一个实现该接口(interface)的私有(private)实例成员,它将编写公开实现该接口(interface)所需的所有方法。它工作正常,但会生成大量样板文件。我有点希望 Java 人员至少能够为“多重继承问题”提供部分解决方案。
编辑:你说没有共同的基类,但你又说:
You cannot create a base class in this case since it's Java with its single inheritance - and both Sausage and Banana are already extending something. Unless I'm missing something you can see...
如果可以更改继承,则可以创建公共(public)基类:
class Food { ...
class Fruit extends Food {...
class Banana extends Fruit {...
class Meat extends Food {...
class Sausage extends Meat { ...
但我的回答假设您出于任何原因都不能这样做。
关于java - 通过 Java 接口(interface)传递设置 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55308920/