给定: 我有两个不同的项目遗产A和nextGen B. 第三个项目C在A和B之间共享。
目标: 我必须在第三个项目C中执行averageCalculation()。但是项目A和B的实现是不同的。使用相同的方法签名但不同的实现,如何创建设计?注意:项目A和B应该只调用averageCalulation()相同的方法签名。
项目C
Interface I {
averageCalculation();
}
Class CClass implements I{
?<averageCalculation()-for A>
?<averageCalculation()- for B>
}
项目A
{
I i1 = new CClass();
i1.averageCalculation();
}
项目B
{
I i2 = new CClass();
i2.averageCalculation();
}
上述方法是否正确?如果是这样,我将如何在CClass中创建averageCalculation()的两个实现?
答案 0 :(得分:2)
创建两个实现接口的不同类,并在每个项目中使用不同的类:
项目C
interface I {
averageCalculation();
}
class CClassForA implements I{
averageCalculation(){...} // for A
}
class CClassForB implements I{
averageCalculation(){...} // for B
}
项目A
{
I i1 = new CClassForA();
i1.averageCalculation();
}
项目B
{
I i2 = new CClassForB();
i2.averageCalculation();
}
答案 1 :(得分:0)
接口只是实现它定义的类的契约。如果一个类在一个接口中需要两个不同的单个方法实现,那么你应该考虑重新设计你的项目
你为什么需要CClass?您可以在Project A中使用类I,在Project B中使用另一个类来执行相同的操作。
编辑:编译器不会让您拥有具有相同签名的方法的两种不同实现。如果你想要的话,你可以选择重载它
public interface SomeInter
{
public void doSomething();
}
public class ImplClass implements SomeInter
{
@Override
public void doSomething() {
// TODO Auto-generated method stub
}
public void doSomething(String abc)
{
// TODO Auto-generated method stub
}
}
希望这会有所帮助!!
答案 2 :(得分:0)
我不确定我完全理解你的问题,但这是一个解决方案。您无法更改旧项目,但是您希望A和B符合某些接口I.您可以通过将A和B包装在符合I的内容中并使用A和B实现I来实现此目的。各自的实施。
public class Problem {
public static class A{
public int foo(){
return 3;
}
}
public static class B{
public int foo(){
return 5;
}
}
public interface TheFoo{
public int foo();
}
public static class AWrapper extends A implements TheFoo{
public int foo(){
return super.foo();
}
}
public static class BWrapper extends B implements TheFoo{
public int foo(){
return super.foo();
}
}
public static void main(String[] args){
//TheFoo[] myFoos = new TheFoo[]{new A(), new B()}; Won't work
TheFoo[] myFoos = new TheFoo[]{new AWrapper(), new BWrapper()};
for(TheFoo curFoo : myFoos){
System.out.println(curFoo.foo());
}
}
}