软件构造第三章学习笔记及心得(四)

软件构造这门课是比较具有挑战性,知识点多且琐碎的,因此,我将结合ppt和回放,对软件构造的知识点来进行整理,主要用于对于知识点的记忆和复习,如果能够对你有所帮助,那荣幸之至。

在这篇博客中,我将对第三章 3.4 这节的知识点来进行整理总结。

3.4面向对象的编程

3.4.1 一些基本概念

  • 静态成员/方法:所有类所共享(我之前有blog对static做过描述)
    注1:在编写静态方法的时候,因为这个方法是被所有对象所共享的,因此只能够使用静态成员/方法。
    注2:可以在接口中实现一个静态方法,用来创建对象
  • 实例成员方法/方法:每个对象单独所有

3.4.2 接口

接口可以理解为一个极端的抽象类
一个接口可以有多个实现类,一个类也可以实现多个接口。
接口之间也可以继承和扩展。
接口往往是需要拿给用户看的,因此接口中不应该包括实现的细节,由此接口中不应该包含constructors,用户在创建对象的时候,可以使用静态方法返回一个对象(接口中允许存在静态方法)如下图所示
在这里插入图片描述

3.4.3 继承和重写

3.4.3.1 重写

重写就是子类对父类中的方法进行修改,但是方法signature不能变。
在实际运行的时候根据对象类型决定调用哪个方法
注1:父类中关键词final限定住的类,在子类中不能重写(参考模板模式)
注2:子类通过super调用父类中的方法(构造器中要放在第一句)
注3:子类重写的方法要比父类强(Lsp原则,程序员保证)
注4:子类有父类方法的完整拷贝

严格继承:子类只能重写父类中的方法,不能够添加新的方法。
如果不严格继承,那么当用子类型对象去赋值给父类型的时候,无法调用子类型中实现的新的方法。(因为重载是在编译阶段完成的,如果变量类型的类中没有该方法,那么会直接报错)

接口:能干嘛
继承:is a

3.4.3.2 抽象类

用关键词abstract修饰。其中至少有一个抽象方法(只有signature没有body)比如说有一个方法是子类都有的但是实现起来又有差别,则可以在父类型中设计抽象方法,然后在各子类型中重写。

3.4.4 多态,子类型,重载

3.4.4.1 特殊多态:重载

共用一个方法名,用参数区分(与参数类型有关而与参数名字无关)。
重载在编译阶段决定要具体执行哪个方法,因此是根据变量类型而不是根据具体赋值类型。
比如说下面这个例子
在这里插入图片描述
前四个能够正常执行
注:第二个能执行是因为父类操作在子类中有备份
后两个操作再编译阶段报错,因为Animal类中没有对应的方法。

重写和重载对比:
在这里插入图片描述

3.4.4.2 参数型多态:泛型

参数型多态简单来说就是在执行的时候再进行赋值使用。
用<>来声明泛型。

对于一个泛型接口,可以有泛型的实现类或者非泛型的实现类。
注:在运行时泛型会被擦除,因此不能够创建泛型数组以避免冲突。

3.4.4.3 子类型多态

根据LSP原则,如果B继承了A,则代表任意的B都是A,即A能干的事情,B也一定能干,而且B对于属性不应该增加额外的约束,比如说将正方形作为长方形的子类增加了额外的RI,违背了LSP原则。

子类型多态:定义一个父类型变量,然后将子类型对象赋值给他,代表不同的实现(策略模式)。这样做能够隔离变化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值