HIT 软件构造期末复习七 面向对象的编程

使用接口数据类型把抽象数据类型的实现和接口分离
用接口定义ADT,并编写实现的类接口。

OPP的基本概念有:
封装与信息隐藏
继承与重写
多态,子类型,重载
静态与动态分派

1.基本概念:对象、类、属性和方法

现实世界中的物体有两个共同的特征:它们都有状态和行为。
例如:人有状态喜怒哀乐,工作学生运动等行为

识别真实世界对象的状态和行为非常重要以面向对象编程的方式开始思考。

对每一个我们看到的对象,我们都要思考他有那些行为和状态

状态:对象中包含的数据。在Java中,这些是对象的字段
行为:对象支持的动作,在Java中,这些被称为方法,方法只是面向对象语言中的函数

每一个对象都有一个类,类定义了对象中的方法和字段,方法和字段统称为类的成员;
类定义了类型和实现,类型就是可使用对象的位置,方法就是对象做事的方法

案列:
在这里插入图片描述
在这里插入图片描述
class variable 类的成员变量:与类相关的变量而不是使用类的实例
不是类方法或类变量的方法和变被称为实例方法或实例成员变量

任何特定实例都不与静态方法相关联一个类,而实例方法(声明时不使用静态关键字)必须在特定对象上调用。

在这里插入图片描述
在这里插入图片描述

2.接口和枚举

Java的接口是一种有用的语言机制,用于设计和表示一个ADT,其实现为一个类实现该接口。
Java中的接口是方法的列表,但不是方法主体。
如果类在其中声明了接口,则该类实现了接口实现子句,并提供所有接口的方法体方法。
一个接口可以扩展一个或多个其他接口
一个类可以实现多个接口

Interface和Class: 定义和实现ADT
接口之间可以继承与扩展
一个类可以实现多个接口(从而具备了多个接口中的方法)
一个接口可以有多种实现类

例如:
接口
在这里插入图片描述
实现多个ADT
在这里插入图片描述
在这里插入图片描述

客户端
在这里插入图片描述
在这里插入图片描述

接口:确定ADT规约;
:实现ADT
也可以不需要接口直接使用类作为ADT(既有ADT定义也有ADT实现)
实际中更倾向于使用接口来定义变量

在这里插入图片描述
接口中的每个方法在所有类中都要实现
通过default方法,在接口中统一实现某些功能,无需在各个类中重复实现它。
以增量式的为接口增加额外的功能而不破坏已实现的类

4.封装和信息隐藏

使用接口类型声明变量
客户端仅使用接口中定义的方法
客户端代码无法直接访问属性

private只能从声明的类中访问
protected可以从声明类的子类(和内包)
public公共-可从任何地方

仔细设计API只提供客户端和所有其他所需的功能成员应该是私有的
您总是可以在以后将私有成员设置为公共,而不需要打破客户端

在这里插入图片描述

5.继承与重载

在这里插入图片描述

5.1重写(覆盖)overriding

可重写方法:允许重新实现的方法。
在Java中,方法默认是可重写的,即没有特殊关键字。

严格继承的方法不可以重写:子类只能添加新方法,无法重写超类中的方法
子类只能给父类添加新方法,不能覆盖它们
如果某个方法在Java程序中不能被覆盖,则必须将该方法添加前缀用关键字final。

在这里插入图片描述
在这里插入图片描述
final字段:防止在初始化后对字段重新赋值
final方法:防止重写该方法
一个final类:防止扩展类-例如,公共final类CheckingAccountImpl

方法重写是一种语言特性,它允许子类或提供特定实现方法 that 已经由它的超类或父类之一提供,重写的函数具有与之前的函数完全相同的姓名,参数,返回值等。

实际执行时调用哪个方法,运行时决定。

如果使用父类的对象来调用方法,则父类中的版本将被执行;

如果子类的一个对象被用于调用方法,然后调用子程序中的版本类将被执行。

在这里插入图片描述
在这里插入图片描述
重写的方法中如果需要复用被重写的方法可以使用关键字super
在这里插入图片描述
在构造器方法中,super必须第一个出现
在这里插入图片描述

5.2抽象类

抽象方法:只有签名没有实现的方法

抽象类:包含至少一个抽象方法,并且只有抽象方法

在这里插入图片描述

在这里插入图片描述

6.多态 子类型 重载

6.1 特殊多态

在这里插入图片描述
重载:多个方法具有同样的名字,但有不同的参数列表或返回值类型
价值:方便client调用,client可用不同的参数列表,调用同样的函数

函数重载是创建多个方法的能力
不同的实现具有相同的名称
对重载函数的调用将运行该函数的特定实现
函数适用于调用的上下文,允许一个函数调用
根据上下文执行不同的任务

重载是一个静态多态:
根据参数列表进行最佳匹配
静态类型检查
在编译阶段时决定要具体执行哪个方法 (static type checking)
与之相反,overridden methods则是在run-time进行dynamic checking!
函数重载的规则:重载的函数必须不同 可以通过级别或数据类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2参数多态性和泛型编程Parametric polymorphism and Generic programming

在这里插入图片描述
在这里插入图片描述

Set是泛型类型的一个示例:其规范为根据稍后要填充的占位符类型。
而不是编写单独的规范和实现,而不是编写单独的规范和实现
Set , Set ,等等,我们设计和实现一个 Set

在这里插入图片描述
在这里插入图片描述

6.3子类型多态

类型是一组值。
—Java List类型由接口定义。
-如果我们考虑所有可能的List值,它们都不是List对象:我们不能创建接口的实例。
-相反,这些值都是ArrayList对象,或LinkedList对象,或另一个实现List的类的对象。
子类型只是超类型的一个子集——ArrayList和LinkedList都是子类型

子类型的规约不能弱化超类型的规约。
子类型多态:不同类型的对象可以统一的处理而无需区分

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值