从接口调用一些方法而不覆盖JAVA中的所有方法

时间:2013-01-19 18:33:32

标签: java class design-patterns interface dependency-injection

朋友们,我在Java中遇到了一个问题:我想实现一个结构,但是我遇到了一些困难,任何人都可以帮助我。

interface samp1{
    method1()
    method2()
    method3()
}

interface samp2{
    method4()
    method5()
}
class Samp implements samp1,samp2
{
  // this class needs only method1 from interface samp1 and method 4 from interface samp2
  // I don't want to override all the methods from interface 
}

有人可以为此提出一些解决方案吗?

有没有可用的设计模式?如果是,请提供参考链接。

提前致谢。

6 个答案:

答案 0 :(得分:7)

接口是合同。它说“我的类实现了这些方法的所有”。

请参阅:http://docs.oracle.com/javase/tutorial/java/concepts/interface.html

如果您不想这样,请不要使用界面。

答案 1 :(得分:1)

Java 8允许接口中的默认方法,如果在实现接口时未覆盖特定方法,则使用该方法。 例如:

interface MyInterface{
    //if a default method is not provided, you have to override it 
    public int Method1(); 
    public default int Method2(){
        return 2;
    }
}

public class MyClass{
    public static void main(String args[]){
        MyInterface in = new MyInterface(){
            public int Method1(){
                return 0;
            }
        };
        //uses the implemented method
        System.out.println(in.Method1()); //prints 0
        //uses the default method
        System.out.println(in.Method2()); // prints 2
    }
}

答案 2 :(得分:0)

将类声明为abstract,您不需要实现所有方法。但请注意,抽象类无法实例化。

答案 3 :(得分:0)

如果没有更多关于你想要达到的目标的背景,我建议这样做:

interface BaseSamp {
    void method1();
    void method4();
}

interface Samp1 extends BaseSamp {
     void method2();
     void method3();
}

interface Samp2 extends BaseSamp {
    void method5();
}

class YourClass implements BaseSamp {
 ....
}

答案 4 :(得分:0)

interface MySpecializedInterface{
   public void method1();
   public void method4();
}

class YourClass implements MySpecializedInterface{

  // now you can implement method1 and method4... :|
}

答案 5 :(得分:0)

实现接口时,没有其他方法可以实现接口中的所有方法。在上面的类“samp”中,您正在实现“samp1”和“samp2”接口,因此您必须在samp类中实现samp1和samp2中的所有方法。

你说过界面的覆盖方法。你不要从接口覆盖方法,你只需要实现方法。

您可以使用抽象类来解决您的问题。

abstract class AbstractSamp implement samp1,samp2{

 method1(){...}
 method4(){...}
}

你可以在你的samp类中扩展Abstractsamp,如下所示

class samp extends AbstractSamp{

// here you can extend method1() and method4() by inheritence and you can also    override   them as you want

}