Java 接口的部分实现
我有一个不确定的说法Java 接口的部分实现,java,oop,interface,Java,Oop,Interface,我有一个不确定的说法 public interface myInterfacy { String kilogramToGram(); Long litresTomiliLitres(); String inchesToMillimeters(); String ouncesToGrams(); } 我需要这个接口的多个实现,但我想在不同的实现上部分实现这个接口, 作为: 我认为我可以通过使用抽象类来进行di,但我想知道是否还有其他好的方法是可能的。答案
public interface myInterfacy {
String kilogramToGram();
Long litresTomiliLitres();
String inchesToMillimeters();
String ouncesToGrams();
}
我需要这个接口的多个实现,但我想在不同的实现上部分实现这个接口,
作为:
我认为我可以通过使用抽象类来进行di,但我想知道是否还有其他好的方法是可能的。答案相对简单,但有很多选择 你可以
- 制作一些部分接口,并且“完成所有”的接口实现所有接口(不是很好)
- 您可以创建一些“虚拟”接口,这些接口会引发未实现功能的异常。因此,每个代理类都将实现完整接口,但会在不受支持的方法上抛出运行时错误(也不是很好)
- 只是什么都不做——照字面意思。实现完整的接口并提供空的实体(也不是很好)
class FullyFunctional {
public void foo() {...}
public void bar() {...}
}
class PartiallyFunctional {
FullyFunctional ff;
public PartiallyFunctional(FullyFunctional ff) {
this.ff = ff;
}
// No foo...
public void bar() { ff.bar(); }
}
一种方法是使用方便的基类。然而,这并不是一个好主意,因为您不会得到编译类型检查来帮助确保您不会调用未实现的方法
public interface Converter {
public String kilogramToGram();
public long litresTomiliLitres();
public String inchesToMillimeters();
public String ouncesToGrams();
}
public abstract class AbstractConverter implements Converter {
@Override
public String kilogramToGram() {
throw new UnsupportedOperationException();
}
@Override
public long litresTomiliLitres() {
throw new UnsupportedOperationException();
}
@Override
public String inchesToMillimeters() {
throw new UnsupportedOperationException();
}
@Override
public String ouncesToGrams() {
throw new UnsupportedOperationException();
}
}
public final class A extends AbstractConverter {
@Override
public String kilogramToGram() {
//code
}
}
跟随
public interface IKGToGram {
String kilogramToGram();
}
public interface ILitersToMilliLeters{
Long litresTomiliLitres();
}
public interface IInchesToMilliMeters{
String inchesToMillimeters();
}
public interface IOunceToGrams{
String ouncesToGrams();
}
现在,您可以实现任何想要实现的接口集
查看有关接口隔离概念的说明:
您必须实现界面中的所有方法,除非它们是具有默认实现的方法。如果您想拥有抽象类,那么您可以像您所说的那样提供一个默认实现。如果类
a
和B
应该是可实例化的,那么如果只实现了1个方法,为什么还要有4个方法的接口?使用组合来为实现者提供class a
(在其构造函数中或以其他方式)对于您不希望在类A本身中实现的方法,请重新研究ISR原则和对OP问题的适用性。类不应或多或少实现。这比使用带组合或继承的适配器要好。
public interface IKGToGram {
String kilogramToGram();
}
public interface ILitersToMilliLeters{
Long litresTomiliLitres();
}
public interface IInchesToMilliMeters{
String inchesToMillimeters();
}
public interface IOunceToGrams{
String ouncesToGrams();
}