我想声明一个接口可以用于几个类
这个类有不同参数的方法
接口:
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);
}
如何阻止这个界面?
答案 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);
}
但对于运营而言,这应该有所不同。