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