日期:2014-05-20  浏览次数:20783 次

请大虾指教两种实例化的区别?
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 时只要改一个地方就好了。