java中声明一个接口与直接声明实现类的区别请从晚绑定、运行时等原理讲解,不要不求甚解
Map是所有Map类实现的接口,Map类实现不一定都是java集合框架的,例如hibernate用于实现懒加载的Map就和java集合框架的实现不同,Map接口为所有对Map实现提供统一的操作方法和屏蔽具体实现细节,前者变量能接受任何实现Map接口的对象,后者只能接受HashMap的对象。1.既然new出来了,自然不是null,HashMap对象本身内部也有许多实现属性。2.编译态不太清楚,但两者new出来都是HashMap对象,但前者因为HashMap实现了Map接口,接口类型符合,后者直接符合类型。
■网友
等你需要多态和重构代码的时候就明白这么做的必要性了。初学一次性的程序,不到万把行没复用可能性的,随便怎搞都行。“针对接口编程”挺着好像挺玄乎,可是吃过大亏的人才能说出来的。
■网友
查了下书,JAVA虚拟机提供了四条调用字节码指令,分别是:invokestatic:调用静态方法invokespecial:调用实例构造器方法,私有方法和父类方法invokevirtual:调用所有的虚方法invokeinterface:调用接口方法,会在运行时再确定一个实现此接口的方法。只要能被invokestatic和invokespecial指令调用的方法,都可以在解析阶段确定唯一的调用版本,符合这个条件的有静态方法,私有方法,实例构造器和父类方法四类。它们在类加载的时候就能确定。因此题主问的应该是构造方法,在类加载时候就能确定,并不需要在运行时根据实际类型确定。以上来自《深入理解JAVA虚拟机》208页
■网友
第一种是多态啦,如果实现map接口的类调用的方法是从接口来的,而且重写的方法,那么第一种就会根map引用的实现该接口的类不同调用相应的方法。如果你的子类中有额外添加的方法就要用第二种,因为父类(或接口)中没有这种方法。
■网友
使用接口本人感觉最有用的就是在使用依赖注入这块,降低各个部分的耦合性,便于协同工作。说点实际的,接口就是定义一个标准,大家根据这个标准就可以实现功能,那么符合这个标准的所有类型都可以注入进系统运行,这样实现各种各样的功能岂不是方便。不需要再修改调用端的代码。
■网友
----有new操作即是调用了构造函数,有初始化----声明一个接口与直接声明实现类有区别。比如有两个类分别实现了形如Map\u0026lt;String, String\u0026gt;接口,如下:SubMap1\u0026lt;String, String\u0026gt; extends Map\u0026lt;String, String\u0026gt; ,SumMap2\u0026lt;String, String\u0026gt; extends Map\u0026lt;String, String\u0026gt; 那么在声明一个Map\u0026lt;String, String\u0026gt; map,即可以进行如下操作map=new SubMap1\u0026lt;String, String\u0026gt;();或者map=new SubMap2\u0026lt;String, String\u0026gt;();而直接声明实现类则只能进行如下操作:SubMap1\u0026lt;String, String\u0026gt; subMap1=new SubMap1\u0026lt;String, String\u0026gt;();SumMap2\u0026lt;String, String\u0026gt; subMap2=new SumMap2\u0026lt;String, String\u0026gt;();却不能有SubMap1\u0026lt;String, String\u0026gt; subMap1=new SubMap2\u0026lt;String, String\u0026gt;();SumMap2\u0026lt;String, String\u0026gt; subMap2=new SumMap1\u0026lt;String, String\u0026gt;();显而易见的,声明一个接口比直接声明实现类具有更多的引用选择,这也是多态的一种表现配合上IoC还可以实现插件与基于配置扩展
■网友
JAVA辛辛苦苦给你屏蔽掉的底层信息,你也要知道,反对这种问题
推荐阅读
- 同比■同比增长7.1%!2021年的第一个节你花了多少钱?
- “他是我第一个会说普通话的老师”:一对师生折射青海山村蝶变
- 有必要重新开个C店吗
- 大学再有三个月就结束了,没学到知识,参加一个软件测试培训机构好吗
- 汽车|长安UNI-K又将开创一个新的"引力"纪元?
- 神话|武汉传奇父亲:一个平行班孩子创造的高考神话(感动上万家长)
- 王者荣耀李白能不能出肉
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- 怎样成为一名合格的Python程序员?
- 知乎有没有必要增加一个特别关注功能