第三章 ADT与OOP——面向对象编程OOP

1. 接口

一种用于设计和表达ADT的语言机制,其实现方式是实现该接口的类。

接口(Interface)与类(class)之间的关系为定义ADT规约和实现ADT的关系。

注意,接口之间可以继承,一个类也可以同时继承多个接口。一个接口也可以由多种实现。具体的代码就自己尝试敲啦,网上也有很多例子就不多唠叨栗子啦。

其中值得一提的是,接口定义中没有构造器(construction),也无法保证所有实现类中都包含了同样名字的构造器,所以客户端就需要知道该接口的某个具体实现类的名字,其打破了抽象边界。

当然如果你是用的是java8以上的版本,其允许了在接口中包含静态方法,所以也就可以实现构造器指定一个实现。例如下面的栗子:



现在来说一下使用接口的优点,有点有很多,这里也仅仅是介绍一点而已:

  1. 当用户使用接口类型时,静态检查使他们只能够使用由接口定义的方法。如果用户看到了实现类的方法也就违反了表示独立性。
  2. 客户与维护人员确切的知道应该在哪里查找该ADT的规约,因为接口不包含实例的实现,所以更容易将实现的过程阻隔在规约外面。
  3. 通过增加实现接口的类,我们可以轻松的添加新类型的实现。

最后小小的谈一下抽象类:

抽象类:包含至少一个抽象方法的类称为抽象类。 

接口:一个只有抽象方法的抽象类。



抽象方法:具有signature但没有实现的方法(也称为抽象操作),由关键字abstract定义。 

Concrete class -> Abstract Class -> Interface


2. 继承、override

继承主要分为两种:普通的继承和严格继承。

普通继承不用解释,对于严格继承:子类中只能添加新方法,无法重写父类中的方法。要实现严格继承很简单,与在类前+final修饰禁止继承差不多,只需要在每个方法前用final修饰即可,前者禁止继承,后者禁止重写。

override:

重写的方法拥有完全相同的参数,方法名,返回值,但可视性可以扩大,但注意不能缩小,例如父类中修饰符为protected,那么子类重写方法修饰符可以为public,但不能为private。

至于重写时具体执行那个方法,在运行时决定。另外值得一提的是,重写方法切记不要改变原方法本意。



3. 多态、overload

多态:

首先谈一下多态的分类:

  1. 特殊多态(hot polymorphism):功能重载。
  2. 参数化多态(parametric polymorphism):泛型或泛型编程。
  3. 子类型多态 subtype polymorphism(包含多态 inclusion polymorphism):当一个名称表示许多不同的类与一些常见的父类相关的实例。
 

overload:

多个方法具有同样的名字,但有不同参数列表或返回值类型。

价值:方便客户端调用,客户端呢可用不同的参数列表调用相同的方法。

注意重载是静态多态,是在编译阶段时决定要具体执行哪个方法(静态类型检查),根据参数列表进行最佳匹配。与此不同,重写是在动态类型检查中,即运行阶段检查。

重载检查规则:



最后附上重写与重载对比:




18. 泛型(Generics)

其主要应用分为两种:

  • 泛型接口
  • 泛型方法

一些泛型的注意事项:


泛型到第五章我们还会详细介绍,第五章讲的是代码的复用,这也是用泛型的主要目的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值