软件构造期末复习知识点整理

											**面向对象的编程**

一、基本概念:对象、类、属性和方法
现实世界中的物体有两个特征:它们都有状态和行为。识别真实对象的状态和行为是开始用OOP来思考的好方法。狗有状态(名称、颜色、品种、饥饿)和行为(吠、抓、摇尾巴)。自行车具有状态(当前档位、当前踏板节奏、当前速度)和行为(换档位、换踏板节奏、施加制动器)。
对象是状态和行为状态的集合——对象中包含的数据。在Java中,这些是对象行为的字段—对象支持的操作—在Java中,这些称为方法—方法只是OO语言—调用=调用函数的方法。
每个对象都有一个类——类定义方法和字段—方法和字段统称为成员类定义类型和实现——可以使用对象的类型≈实现≈对象如何松散地说,类的方法是其应用程序编程接口(API)——定义用户如何与实例交互。
类变量和类方法与一个类相关联,并且每个类发生一次。使用它们并不需要创建对象。实例方法和变量在每个类的实例中发生一次。
静态方法不与类的任何特定实例进行关联,而必须在特定对象上调用实例方法(没有静态关键字而声明)。

二、接口和枚举方法
Java的接口是设计和表达ADT的有用语言机制,其实现为实现该接口的类。Java中的接口是方法签名的列表,但没有方法体。如果类在其实现子句中声明了接口,则会实现接口,并为接口的所有方法提供方法体。一个接口可以扩展一个或多个其他接口,一个类可以实现多个接口。
接口:确定ADT规约;类:实现ADT;也可以不需要接口直接使用类作为ADT,既有ADT定义也有ADT实现;实际中更倾向于使用接口来定义变量。
一个ADT是由其操作来定义的,而接口就是这样做的。客户端使用接口类型时,静态检查确保仅使用接口定义的方法。如果实现类公开了其他方法,或者更糟的方法,具有可见表示,客户端不会意外地看到或依赖它们。当我们有多个数据类型的实现时,接口会提供对方法签名的静态检查。
客户和维护人员确切地知道该在哪里寻找ADT的规范。由于该接口不包含实例字段或实例方法的实现,因此更容易将实现的详细信息排除在规范之外。
我们可以通过添加实现接口的类来轻松地添加一种类型的新实现。如果我们避免构造函数支持静态工厂方法,客户机只能看到接口。这意味着我们可以切换根本不更改它们的实现类客户端使用的代码。

三、封装和信息隐藏
区分设计良好的模块和坏的模块的唯一最重要的因素是它隐藏内部数据和其他实现细节的程度。精心设计的代码隐藏了所有实现细节——清晰地将API与实现分离——模块只通过API通信——它们无视彼此的内部工作,称为信息隐藏或封装,这是软件设计的一个基本原则。
系统的分解组成系统的类—允许单独开发、测试、优化、使用、理解和修改,可以加速系统开发—类可以在减轻维护的负担下开发,可以快速理解和调试,不用担心伤害其他模块实现有效的性能调整,可以单独优化增加软件的重用,松散耦合类在其他情况下通常很有用。
仔细设计您的API只提供客户端所需的功能,并且所有其他成员都应该是私有的,你总是可以稍后公开一个私人成员,而不会破坏客户端。

四、继承和重写
可重写方法:一种允许重新实现的方法。在Java中,方法在默认情况下是可重写的,即没有特殊的关键字。严格继承:子类只能添加新方法,无法重写超类中的方法,子类只能向超类添加新方法,它无法覆盖它们——如果无法在Java程序中覆盖方法,则必须以关键字final作为前缀。
方法覆盖是一种语言特性,它允许子类或子类提供已经由其超类或父类提供的方法的特定实现。相同的名称、相同的参数或签名,以及相同的返回类型,所执行的方法的版本将由用于调用该方法的对象确定。如果使用父类的对象调用该方法,则将执行父类中的版本;如果使用子类的对象调用该方法,则将执行子类中的版本。
当子类包含覆盖超类方法的方法时,它也可以使用关键字super调用援引超类方法。重写的时候,不要改变原方法的本意。
抽象类
抽象方法:一种方法与签名签名但没有实现(也称为抽象操作),由关键字抽象抽象类定义—类包含一个抽象类:至少一个抽象方法称为抽象类接口:只有抽象类接口主要用于系统或子系统的规范。该实现由一个子类或其他机制提供。

五、多态、子类型、重载
特殊多态性:当一个函数表示不同的不同的和潜在的异构实现时。在许多使用函数重载(功能重载)的语言中都支持特殊的多态性。
参数多态性:当代码编写时没有提到任何特定的类型,因此可以透明地用于任何数量的新类型。在面向对象的编程社区中,这通常被称为generics泛型或泛型编程。
子类型(也称为子型多态性或包含多态性子类型多态、包含多态):当一个名称表示与一些常见的超类相关的许多不同类的实例时。
当一个函数在几种不同的类型上工作(可能不表现出共同的结构),并且可能在每种类型上都以不同的方式行为时,就可以获得特别的多态性。
重载的方法可以在类中重用相同的方法名,但具有不同的参数(也可以使用不同的返回类型)。重载方法通常意味着您比那些调用方法的人更好一些,因为您的代码承担了处理不同参数类型的负担,而不是强迫调用者在调用方法之前进行转换。
函数重载是指使用不同的实现创建多个同名方法的能力。对重载函数的调用将运行适合该调用上下文的该函数的特定实现,允许一个函数调用根据上下文执行不同的任务。
不要将覆盖派生类中的方法与重载方法名相混淆——覆盖方法时,派生类中给出的新方法定义与基类中的参数数量和类型完全相同——当派生类中的方法与基类中的方法有不同的签名时,即重载——注意,当派生类重加载原始方法时,它仍然会从基类继承原始方法。
在这里插入图片描述
当一个函数在一系列类型上均匀工作时,可以得到参数多态性;这些类型通常表现出一些共同的结构。它能够以泛型方式定义函数和类型,以便基于运行时传递的参数来工作,即允许在不完全指定类型的情况下进行静态类型检查。这是Java中所谓的“泛型”。泛型编程是一种编程风格,其中数据类型和函数用稍后指定的类型编写,然后在需要时为参数提供的特定类型进行实例化。
类型变量是不限定的标识符类型变量。它们由泛型类声明、泛型接口声明、泛型方法声明和泛型构造函数声明引入。如果一个类声明了一个或多个类型变量,则它是泛型的。
泛型类:其定义中包含了类型变量这些类型变量被称为类的类型参数。它定义了一个或多个作为参数的类型变量。泛型类声明定义一组参数化类型,对于类型参数部分的每个可能调用一个。所有这些参数化的类型在运行时共享同一类。
如果接口声明类型变量,则该接口是通用的—这些类型变量称为接口的类型参数。它定义了一个或多个作为参数的类型变量。通用接口声明定义一组类型,类型参数部分的每个可能调用。所有参数化的类型在运行时共享相同的接口。如果方法声明类型变量,则为泛型。泛型方法这些类型变量称为该方法的形式类型参数。形式类型参数列表的形式与类或接口的类型参数列表相同。
在这里插入图片描述
泛型接口,非泛型的实现类:
在这里插入图片描述
泛型接口,泛型的实现类:
在这里插入图片描述

B是A的一个子类型”,意思是“每个B都是An” A.”  就规范而言:“每个B都满足规范  A.” 如果B的规范至少与A的规范一样强,那么B只是A的子类型。当我们声明实现接口的类时,Java编译器会自动执行部分要求:它确保A中的每个方法都出现在B中,具有兼容的类型签名。如果不实现A中声明的所有方法,类B不能实现接口A。
但是编译器无法检查我们是否没有以其他方式削弱规范:加强方法某些输入的先决条件—削弱后条件—削弱接口抽象类型向客户发布广告的保证。如果在Java中声明一个子类型(例如,实现一个接口),则必须确保该子类型的规范至少与超类型一样强大。
如果S是T的子类型,那么T类型的对象可以被替换为S类型的对象。T类型的对象可以用子类型S的任何对象替换,而不改变T的任何期望属性。

六、Java中的一些重要的对象方法
重写toString():
在这里插入图片描述
重写equals()
在这里插入图片描述
重写hashcode()
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值