我有一个Inreface说
public interface myInterfacy {
String kilogramToGram();
Long litresTomiliLitres();
String inchesToMillimeters();
String ouncesToGrams();
}
我需要有多个这个接口的实现,但我希望在不同的实现上部分实现这个接口, 为:
public class A implements myInterfacy {
public String kilogramToGram(){
//code
};
I don't want to give the definition of other methods.
}
public class B implements myInterfacy {
Long litresTomiliLitres(){
//code
};
I don't want to give the definition of other methods.
}
我认为我可以通过使用抽象类来解决它,但我想知道是否有其他好的方法是可能的。
答案 0 :(得分:1)
答案相对简单,但有很多选择。
你可以
或者,您可以使用特定代理封装功能以提供给定的功能。例如,
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(); }
}
答案 1 :(得分:0)
一种方法是使用便利基类。然而,这并不是一个好主意,因为您不会进行编译类型检查以确保您不会调用未实现的方法。
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
}
}
答案 2 :(得分:0)
关注interface-segregation-principle
一个极端情况:我将为四种方法声明四个接口
public interface IKGToGram {
String kilogramToGram();
}
public interface ILitersToMilliLeters{
Long litresTomiliLitres();
}
public interface IInchesToMilliMeters{
String inchesToMillimeters();
}
public interface IOunceToGrams{
String ouncesToGrams();
}
现在您可以实现您想要的任何接口集。
看看关于界面隔离概念的解释: