Java实践(四)---关于继承设计的一些技巧

本文探讨了面向对象设计的六大核心原则,包括合理利用超类进行公共操作和域的封装、避免使用受保护的域以增强封装性、正确应用继承实现is-a关系、确保覆盖方法时行为的一致性、提倡使用多态而非类型信息以及慎用反射机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 将公共操作和域放在超类

2. 不要使用受保护的域

当超类中的实例域设置为protected时,protected机制并不能够带来更好的保护,因为:

  • 子类集合是无限制的,任何一个人都能够由某个类派生一个子类,并编写代码直接访问protected的实例域,从而破坏了封装性
  • 在Java中,同一个包中的所有类都可以访问protected域,而不管它是否为这个类的子类
  • protected方法对于知识那些不提供一般用途而应在子类中重新定义的方法很有用

Tips:关于封装性,将数据和行为组合在一个包中并对对象使用者隐藏了数据的实现方式。关键:绝不能让类中的方法直接访问其他类的实例。如果不经过方法调用就能改变对象状态,说明封装性被破坏了。

3. 使用继承实现is-a关系

类间关系:

  • 依赖:(uses-a) 一个类的方法操作另一个类的对象,这个类依赖另一个类
  • 聚合:(has-a) 类A的对象包含类B的对象
  • 继承:(is-a) 特殊与一般的关系

使用继承可以达到节省代码的目的
4. 除非所以继承的方法都有意义,否则不要使用继承

5. 在覆盖方法时,不要改变预期的行为

置换原则不仅应用于语法,而且也可以应用于行为。在覆盖一个方法的时候,不应该毫无缘由地改变行为的内涵。

Tips:置换原则,程序中出现超类的地方都可以用子类对象置换

6 . 使用多态,而非类型信息

使用多态性提供的动态绑定机制执行相应的操作

7. 不要过多地使用反射

反射机制是的让人们可以通过在运行时查看域和方法,让人们编写出更具通用性的程序,这种功能对于编写系统程序来说极其有用,但通常不适用于编写应用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值