A a = new AImpl(); (1)
AImpl a = new AImpl(); (2)
a.say();A是接口
用(1)或(2)都可以得到对象a并调用say()方法为什么需要用(1)呢··那不多余定义了一个接口A吗?·
谢谢各位··
AImpl a = new AImpl(); (2)
a.say();A是接口
用(1)或(2)都可以得到对象a并调用say()方法为什么需要用(1)呢··那不多余定义了一个接口A吗?·
谢谢各位··
解决方案 »
- 如何在一个页面不跳转的情况下请求多个SpringMVC的Controller,就像S标签的action实现的那样
- 如何获得跳转过来的前一页URL
- 求助啊···oracle 问题··
- Struts2的hidden取值为空
- 关于lucene索引数据库的疑问
- web日历,直接把在日历上选中的日期输入到text里面去,有这样的组件吗?
- 晕啊! jsp连不上数据库了! 谁能帮我看看!
- 应用struts时,当表单提交后,出现以下错误是什么原因?
- 请教websphere中的中文问题
- while (true)的线程异常结束
- spring mvc映射默认路径
- org/apache/catalina/startup/Bootstrap failed
如果A的实现类只有AImpl一个,那显然显得是多余了
假设你是雇主、招很多人,你只需要告诉他们干什么、要什么结果就可以了,不需要知道他们是如果干的。
程序也是一样、不需要知道实现、只需要知道接口中的方法就好了。
还有就像电脑的usb接口一样,同样的接口可以插鼠标、键盘、硬盘、摄像头
就好比“鼠标、键盘、硬盘、摄像头”都是这个A接口的实现类
public void say() ;
}
public class A1Impl implements A{
public void say(){
}
}public class A2Impl implements A{
public void say(){
}
}public class A3Impl implements A{
public void say(){
}
}
import java.util.List ;
import java.util.ArrayList ;
public class Test { public static void main(String[] args){
List list = new ArrayList() ;
list.add(new A1Impl()) ;
list.add(new A3Impl()) ;
list.add(new A2Impl()) ;
list.add(new A3Impl()) ;
A a ;
for (int i = 0; i < list.size(); i++){
a = (A)list.get(i) ; //不管是哪个实现类 ,统一转换为接口A
a.say() ;
}
}
}