具有不同方法参数的接口

时间:2013-02-17 13:38:42

标签: java class interface

我想声明一个接口可以用于几个类
这个类有不同参数的方法

接口:

public interface Operation {

public int Add();

}

A类:

public class CLASSA implement Operation{

     public int Add(int id,String name);

}

B班:

public class CLASSB implement Operation{

     public int Add(String name);

}

如何阻止这个界面?

8 个答案:

答案 0 :(得分:8)

你可以制作一个操作数对象

public interface Operation {

public int Add(Operand o);

}

public interface Operation {

 public int Add(Operand... o);

}

答案 1 :(得分:3)

关于上述答案值得一提的几点:

我的建议是实现Command模式之类的东西。将命令实现与其实现分离正是其意图。

答案 2 :(得分:1)

在这种情况下,您没有使用相同的界面,但您可以创建一个自动插入一些参数的遗传系统:

public class CLASSA{
     public int Add(int id,String name){
         //something
     }
}

public class CLASSB extends CLASSA{
     public int Add(String name){
         super.Add(this.FIXED_ID, name);
         //something
     }
}

public class OPERATION extends CLASSA{
     public int Add(){
         super.Add(this.FIXED_ID, this.FIXED_NAME);
         //something
     }
}

答案 3 :(得分:1)

更好的方法是将参数声明为类中的字段。现在将它作为参数传递给构造函数,所以现在在创建类的新实例时指定它。

答案 4 :(得分:0)

你不能这样做。如果接口操作是您的(未预定义或其他人),则在其中重载抽象方法。这是唯一的方法。

答案 5 :(得分:0)

最好试一试:

public interface Operation {
    public int add();
}


public class SimpleOperation implements Operation {

    @Override
    public int add() {
        return 0;
    }

    public int add(int id, String name) {
        return id;
    }

}

使用时:

Operation op = new SimpleOperation();
op.add(); // Valid
op.add(2, "two"); // Invalid

基本上,虽然您可以将该方法添加到类中,但如果它在接口中不存在,那么如果您调用它的实例属于该接口,则无法调用它。

这是有效的,因为实例属于类SimpleOperation,其中声明了重载方法:

SimpleOperation op = new SimpleOperation();
op.add(); // Valid
op.add(2, "two"); // Also valid

然而,这降低了界面的有用性。如果您热衷于重载方法,请考虑使用两个定义方法的抽象超类,并在子类中覆盖它们。或者,将原始方法和重载方法都添加到界面中。

答案 6 :(得分:0)

这是一个坏主意,它违反了OO设计和界面背后的想法。应该使用接口作为从实现中抽象出方法调用的方法。

我的建议是在接口中使用带有这两个参数的方法,只是不要在CLASSB中使用ID参数,或者在接口中没有add方法,每个类中只有不同的版本。

答案 7 :(得分:0)

两种解决方案
在接口中定义两个方法:

public interface Operation {

public int addName(String name);
public int addIdName(int id, String name);

}

或使用通用参数

public interface Operation {

    public int add(HashMap<String,String> keyValueParams);
}

但对于运营而言,这应该有所不同。

相关问题