读书人

请指教两种实例化的区别

发布时间: 2012-01-14 20:02:35 作者: rapoo

请大虾指教两种实例化的区别?
interface Analyzer
{……}
class DocumentAnalyzer extends Analyzer
{……}

请问下面两种实例化方式有何区别?

(1) Analyzer textAnalyzer=new DocumentAnalyzer();

(2) DocumentAnalyzer textAnalyzet=new DocumentAnalyzet();


如果没有区别,为什么java不把这两种方式统一起来?


[解决办法]
有区别。

第(1)种方法,限制了你下面对textAnalyzer变量只能调用Analyzer接口中定义的方法。
[解决办法]
如果 不 需要 DocumentAnalyzer里有 而 Analyzer里没有 的方法,用第一种。
就是说,如果Analyzer能满足你了,就用第1种。


[解决办法]
用第一种好些,可以隐藏具体实现,针对接口编程。
方便换成接口的另外一个实现,不必修改源代码,或者只需要修改很少的代码!
[解决办法]
更常用的例子
一般在使用容器对象时建议使用接口,如

Set set = new HashSet();
这样以后你想改用LinkedHashSet, TreeSet 时只要改一个地方就好了。

读书人网 >J2SE开发

热点推荐