10

我想声明一个接口与几个类一起使用,这些
类有不同参数的方法

界面:

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);

}

如何实现这个接口?

4

8 回答 8

13

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

public interface Operation {

public int Add(Operand o);

}

或者

public interface Operation {

 public int Add(Operand... o);

}
于 2013-02-17T13:41:23.853 回答
8

关于其他答案,有几点值得一提:

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

于 2016-01-21T01:42:57.537 回答
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
     }
}
于 2013-02-17T13:51:57.683 回答
1

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

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);
}

但是对于运营来说,这应该有所不同。

于 2013-02-17T15:12:31.450 回答
1

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

于 2018-03-17T07:14:32.430 回答
0

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

于 2013-02-17T13:43:43.697 回答
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

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

然而,这是有效的,因为实例属于 class SimpleOperation,它声明了重载方法:

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

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

于 2013-02-17T13:45:56.337 回答
0

这是一个坏主意,它违反了面向对象设计和接口背后的理念。接口应该用作从实现中抽象出方法调用的一种方式。

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

于 2013-02-17T13:53:39.170 回答