JAVA程序员:直击心灵的几个问题

自己转行做JAVA已经有几个年头了,感觉自己应该脱离新手这个概念了吧。。然鹅突然在网上看到了一个帖子,上面有这么几个问题,啪啪打脸,看来还有很多不足~要继续保持学习,这篇博客也是要把这些问题记录下来,铭记一生。。。

如果你也是一个JAVA程序员,准备好来直击心灵了吗,建议先自己回答了之后再看答案~当然如果你有更好的答案也可以评论~

1.基于接口的继承和基于实现的继承各有什么优缺点?

答:接口的本质其实是一种约定,就像水桶一样,只要是可以装水,并且有个提手都可以叫水桶,具体的实现就好比木桶、铁桶,金桶都叫水桶,只不过实现的方式不一样。

继承的本质是拓展、泛化,父类具有的功能子类都有。但是子类可以增加自己特有的属性和行为,某些父类的行为,子类也可能和父类的不完全一样。

基于接口的优点:1.拓展灵活,协议层面的扩充。2.接口在降低耦合很方便,不像继承那样破坏封装。

基于接口的缺点:只是针对协议的扩展,并没有具体实现代码的复用,此外针对每一个基于接口的类都要实现新扩展的方法,哪怕这个实现类不需要这个协议。(PS 当然现在JDK8 已经是可以提供一个默认的实现了)

基于继承的优点:1.子类可以复用、重写相关方法。2.可以利用多态统一处理。3.给父类增加属性和行为,就相当于给所有子类增加。

基于继承的缺点:子类父类高度耦合,破坏封装、降低灵活性。

2.继承(包括 extend 和 implement)有什么【缺点】

答:

1.子类会依赖父类存在无法解耦,父类的改变会影响子类

2.性能上有影响,如果有10层继承,那么执行一个方法需要寻找10层。

3.多态(polymorphism)有什么【缺点】?

答:多态是同一个行为具有多个不同表现形式或形态的能力。

多态存在的三个必要条件:继承、重写、父类引用子类对象

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

缺点:可能会附带继承的缺点,还有就是使用多态后不能使用子类中有而父类中没有的方法。

4.为什么 Java 可以多继承 interface,而不可以多继承 class

答:多继承会形成菱形继承关系,假设A有2个子类 A1,A2,而B同时继承了A1,A2,那么A中有个方法a(),A1,A2有不同的实现,那么B应该是继承哪个方法呢?而接口就没这么复杂了,因为实现是写在子类里的,只有唯一一个实现,所以是没问题的。

5.类结构设计时,如何考虑可扩展性?

答:这个就大概是设计模式的几大原则了,

1.单一职责原则

2.里氏替换原则:在所有用到父类的地方,如果都替换成子类,程序的行为不变。

3.依赖倒置原则:高层模块不能依赖底层模块,两者都要依赖抽象,具体就是高层调用底层时形参不能是具体的类,而是一个接口,只要实现这个接口的类都可以传进来进行具体业务逻辑。

4.接口隔离原则:一个类不应该继承无用的接口,依赖关系要建立在最小接口上

5.迪米特法则:每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

6.开闭原则:对扩展开放,对修改关闭,

开闭原则是所有其他原则和设计模式的基础, 其核心思想就是抽象, 抽象事物或行为的共性, 并且用抽象限制细节, 就是所谓的面向接口编程. 抽象一旦定义一般情况下就不应当再做任何修改,否则就严重影响了程序的可维护性,所有依赖该抽象的实现必须随之修改!  (转自:https://www.jianshu.com/p/4d8d6a6121eb

6.为什么Stringbuilder比String在字符串拼接的时候更好更快?

答:首先StringBuilder比StringBuffer更快,因为StringBuffer是线程安全的,所有方法都被synchronized包裹,StringBuilder比String更快更好是因为String不可变,StringBuilder是可变的,String每次更改后都会生成一个新的String对象。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值