对接口、继承、组合、多态的理解

本文介绍了面向对象设计的几个基本原则,包括针对接口编程而非实现编程、优先使用对象组合而非类继承等。并详细解释了继承、抽象类、接口及组合的概念与应用场景。

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

面向对象设计的原则

1、针对接口编程,而不是针对实现编程

2、优先使用对象组合,而不是类继承

继承

   当子类继承父类时,子类包含了父类定义的所有数据和操作,子类的实例包含了所有子类和父类定义的数据,并且能完成子类和父类定义的所有操作。

   类继承是通过复用父类功能而扩展应用功能的基本机制。

  父类的访问权限问题:(Java编程思想P116

  1、子类不能访问父类的private修饰的成员;

  2、子类与父类不在同一个包中,子类不能访问父类包访问权限修饰的成员;

  3、子类与父类在不同的包中,子类可以访问父类中被protected修饰的成员。

抽象类

   抽象类的目的是为它的子类定义公共接口

接口

   接口就是对象能响应的请求的集合(public修饰的方法)。因此接口中定义的方法都是publictabstract的,且都可以省略。(接口中定义的数据都是public static final的)

   根据接口来操纵对象的好处:

   1、客户无须知道所使用对象的特定类型,只须对象有客户所期望的接口;
   2、客户无须知道所使用对象是用什么类型实现的,只须知道定义接口的抽象类。

不将变量声明为某个特定的具体类的实例对象,而是让它遵从抽象类所定义的接口。极大减少系统实现之间的相互依赖关系。

组合

   通过获得对其他对象的引用而在运行时刻动态定义。组合要求对象遵守彼此的接口约定。

因为对象只能通过接口访问,所以并不会破坏封装性,只要类型一致,运行时还可以用一个对象来代替另一个对象。对象的实现是基于接口编写的,所以存在较少的依赖关系。

继承和组合的比较

 1、继承是在编译时静态定义的,组合是在运行时刻动态绑定的

 2、继承在编译时刻就定义了,因此运行时刻无法改变从父类继承的实现,父类实现中的任何变化必然导致子类发生变化。

多态(动态绑定、后期绑定、运行时绑定)

  不同对象可能对相同请求有不同的实现。

  接口与其功能的实现是分离的,因此不同对象可以对请求做不同的实现。也就是两个相同接口的对象可以有完全不同的实现。

  动态绑定:发送给对象的请求与相应操作在运行时连接

持有父类或接口类型的引用,在运行进连接具体对象(子类或实现接口的实例)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值