Java 在特定对象中实现接口
我正在尝试实现一个接口,它应该影响类的某些对象,但不会影响其他对象 例如,假设这是我的代码:Java 在特定对象中实现接口,java,oop,Java,Oop,我正在尝试实现一个接口,它应该影响类的某些对象,但不会影响其他对象 例如,假设这是我的代码: public interface KnowsHowToSwim{ double getHowFast(); } public class Stable{ Horse pinky = new Horse(veryFast); Horse lightning = new Horse(veryPretty){ @Override public floa
public interface KnowsHowToSwim{
double getHowFast();
}
public class Stable{
Horse pinky = new Horse(veryFast);
Horse lightning = new Horse(veryPretty){
@Override
public float getPrettynessFactor(){
return super.getPrettynessFactor()*10000000000
}
};
Horse wetty = new Horse(soCool); <-- This one should KnowHowToSwim
}
现在,我知道我可以创建一个新类来扩展horse并实现KnowHowToSwim,但是由于我的应用程序将有许多来自不同类的字段来实现该接口,我想知道是否有一种方法可以在特定对象中实现接口,就像Horse lightning重写其方法一样。不,你不能
您不需要trait或mixin之类的东西,这在Java中是不受支持的。
Java8在接口中的默认方法不适用于您,因为您需要实例中的属性或对实例的访问,这是不可能的。默认方法没有对此的引用
此外,从面向对象的角度来看,您必须定义一个单独的类,扩展Horse并实现KnowsHowToSwim。所有的例子都是一匹马,知道如何游泳。当然,您只能创建它的一个实例
但是,您可以在方法体内部定义一个类,即工厂方法,也称为本地类。此类包含对方法中所有有效最终变量的引用。例如:
public static Horse newSwimmingHorse() {
final Object methodScopeProperty = ...;
class SwimmingHorse extends Horse implements KnowsHowToSwim {
double speed;
double getHowFast(){
methodScopeProperty.doSomething(); //do you need this access?
return speed;
}
}
return new SwimmingHorse();
}
但只要您没有从可访问的方法范围中获得任何好处,我就不推荐它。改为使用静态内部类,可选地使用有限可见性或包私有类。这将使您的代码更加内聚。Java 8接口默认方法实现能否满足您的需要?让类stable实现您的接口,并在类stable中创建默认实现。现在,只有在需要时,才可以像在示例中那样重写该方法。@metichi您确定继承是唯一的方法吗?我不完全理解你的需要,但也许构图对你更合适。我担心会是这样。有没有可能在一个方法中定义新的类,这样我就可以在我实例化对象的地方声明它,并将其全部放在代码中?