部分实现接口

时间:2016-02-16 07:20:37

标签: java oop interface

我有一个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.
}

我认为我可以通过使用抽象类来解决它,但我想知道是否有其他好的方法是可能的。

3 个答案:

答案 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

  1. 将胖界面划分为粒状小界面
  2. 仅实施需要界面
  3. 一个极端情况:我将为四种方法声明四个接口

    public interface IKGToGram {
    
        String kilogramToGram();
    }
    public interface ILitersToMilliLeters{
    
        Long litresTomiliLitres();
    }
    public interface IInchesToMilliMeters{
    
        String inchesToMillimeters();
    }
    public interface IOunceToGrams{
        String ouncesToGrams();
    
    }
    

    现在您可以实现您想要的任何接口集。

    看看关于界面隔离概念的解释:

    Interface Segregation Principle- Program to an interface