面向对象: 从继承-封装-多态谈起

一. 封装
1. 为什么要封装?

为了信息隐藏和数据保护。外部(调用方)只能通过类对外授权的函数访问内部数据.

2. 语言层面。如何实现封装的数据保护信息隐藏?

通过访问权限控制的关键字,Java中就是public private。 protected

3. 为什么要对类的属性, 做数据保护?

所谓数据保护就是属性的保护,不让外部直接修改类的属性,而是只能通过类自身暴露的方法修改,让对象只能自己修改自己的数据。因为类中的属性很可能有关联性,互斥性。修改一个,另一个也要改变。如果不暴露统一的修改方法,很可能造成修改的错误使用。

二. 继承
1. 继承表示了一种什么样的逻辑关系?

继承是用来表示类之间的 is-a 关系,比如猫是一种哺乳动物.
A继承b,表达的意思就是,A “is a” B。

2. 为什么说"多用继承少用组合"?

继承和组合都能实现代码复用的目的。很多人甚至觉得应该多用组合,甚至不用继承. 继承的概念很好理解,也很容易使用。不过,过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差。为了了解一个类的功能,我们不仅需要查看这个类的代码,还需要按照继承关系一层一层地往上查看“父类、父类的父类……”的代码。还有,子类和父类高度耦合,修改父类的代码,会直接影响到子类

三. 多态
1. 什么是多态?

多态是指,子类可以替换父类. 代码在编写时, 组合的事父类定义的属性; 而在实际的代码运行时,调用子类的方法实现。

2. 实现多态,需要语言层面哪三个机制?
  1. 父类可以引用子类对象。
  2. 子类要能继承父类,表示子类也是父类的一员, 也能当父类对象使用。
  3. 子类也能复写父类的方法。
四. 面向对象退化成面向过程的一些做法
1. 为什么不应该对所有属性暴露 setter 方法?

对每个属性添加setter方法,破坏了封装的"隐藏内部数据,外部仅能通过类提供的有限的接口访问"特性. 相当于没有提供数据的访问权限控制,任何代码都可以随意修改它,代码就退化成了面向过程编程风格的了。

2. 对集合类型的属性加getter方法也会破坏类的封装特性?

是的,如果直接用getter把集合属性暴露给外层,外层还是能对集合增删元素,或者修改其中某个元素的属性,又破坏了封装特性

3. 为什么常见的web开发其实是面向过程开发?

因为常见的web开发是mvc分层开发,分为数据层服务层接口层。每层有自己的vo或bo对象。所以每一层都是数据和方法分开的贫血模型,没有封装的特性。也就不是面向对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值