我有以下课程:
public interface IBaseInterface {
String baseMethod();
}
public class BaseClass implements IBaseInterface{
@Override
public String baseMethod() {
return "baseInterface";
}
public String otherBaseMethod(){
return "otherBaseMethod";
}
}
public class ClassA implements IBaseInterface{
@Override
public String baseMethod() {
return "ClassA";
}
public String getAttribiuteA(){
return "A";
}
}
public class ClassB implements IBaseInterface {
@Override
public String baseMethod() {
return "ClassB";
}
public String getAttribiuteB(){
return "B";
}
}
现在我有两种非常相似的方法:
private String getBaseMethod(){
/** Do something */
if(/** */){
BaseClass base = new BaseClass();
return base.baseMethod();
}else if (/** */){
ClassA a = new ClassA();
return a.baseMethod();
} else {
ClassB b = new ClassB();
return b.baseMethod();
}
}
private String getOtherMethod(){
/** Do something */
if(/** */){
BaseClass base = new BaseClass();
if(/** */){
return base.baseMethod();
} else{
return base.otherBaseMethod()
}
} else if(/** */){
ClassA a = new ClassA();
return a.getAttribiuteA()
} else{
ClassB b = new ClassB();
return b.getAttribiuteB();
}
}
这两种方法非常相似。 if 子句中的条件相同。我们可以改进这两种方法吗?更“抽象”?
我无法在我的课程中进行任何更改,只能在方法中进行更改。
我认为这里要求的是使用“多态性”
因为所有三个类,BaseClass、ClassA 和 ClassB 都实现了 IBaseInterface 接口,所以你可以像下面的例子那样做:
IBaseInterface i1 = new BaseClass();
IBaseInterface i2 = new ClassA();
IbaseInterface i3 = new ClassB();
正如您此时已经注意到的那样,您也可以使用 List 来保存您的类。
List<IBaseInterface> interfaces = new ArrayList<>();
interfaces.add(i1);
....
等等
因为 IBaseInterface 具有方法 baseMethod(),所以现在您可以简单地迭代列表并为每个 IBaseInterface 对象调用 baseMethod() 方法。
看看“多态行为”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)