接口与实现类的问题有疑问

平时开发的时候 比如有 接口 A 跟实现类B
B实现了A接口
那么我们想要获取 这个对象会写 A a = new B();

为什么不直接写B b = new B();

1、面向接口编程思想。面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分
2、回到你这个问题上,为什么我们不直接new 它的这个实现类,而是选择用这个接口引用去接收这个实现类的对象呢;就用最常用的 List list = new ArrayList();来举例;
3、List list = new ArrayList();这样你就只能调用List接口里面定义好的方法,而不能使用你自己在ArrayList扩展的方法。ArrayList list = new ArrayList();接口就是定义了一些行为,它要求你应该做什么。
假如你采用了面向接口编程方式,也就是第一种方式:List list = new ArrayList();
就能通过接口很大限度上规范开发人员的实现规则,因为你现在只能调用接口的方法。

我认为是有益于代码的扩展性和维护方便!

向上转型,面向接口的编程,将接口给别人访问,使代码的可维护性更高

A a = new B()是向上转型,是Java多态性的表现,这样可以提高代码的可扩展性和维护性

直接利用 B b = new B();这也是可以的,A a = new B();这是多态的用法,主要目的是为了代码的可扩展性!

向上转型,面向接口的编程

多态呀,这样就可以使用这个接口调用一系列实现的类,扩展性杠杠的.

B b = new B()也可以,这是java的特点之一——多态,主要是为了代码的可扩展性。主要是看实际情况来使用,你要是想只用接口A中的,就用A a = new B(),用到B中独有的B b=new B();我觉得就这个区别。

Java多态性的表现,这样可以提高代码的可扩展性和维护性

扩展性 和维护性 前面的朋友都提到了
用 lol 和 刀塔 解释下这俩特性 lol 就像 A a = new B() 刀塔就像 B b = new B()
在lol 中 所有英雄都是qwer 控制四个技能 而 刀塔则是每个英雄都有不同的按键标准
现在需求来了
1.我要添加新英雄
对于lol 来说 是新建一个 B类 继承A 接口 实现qwer四个技能 就可以了 在编写英雄类时我们是不需要关心调用问题的 我们只需要写好新英雄的qwer技能就好了
对于刀塔来说 我们需要新建一个B类的同时 我们还需要关心下这个英雄的技能释放问题
这个扩展性对于个人来说也许提现不明显 但如果是多人合作的话 有接口的会更稳定 bug少 因为少写了技能调用部分功能
2.我要创建一个新模式 无限火力模式 所有英雄技能输出降低
lol 只需要在 A 接口附近那 修改一下就可以了
刀塔就需要每个英雄技能调用那都要修改下
这在维护性上 我们也会降低很多bug的产生

提高代码的拓展性,java多态性的直观表现