软件构造笔记——第七章 OOP面向对象的编程(上)

本章主要内容
用OOP/接口/类实现ADT
OOP的基本概念
OOP的特性:封装与信息隐藏、继承与重写、多态、子类型、重载、静态与动态分派
一些重要的JAVA object方法
设计好的类
OOP历史与总结

1.基本概念

实例方法:里面的对象有独立的栈
类方法:共享静态方法的栈
注:方法中的基本数据类型放在栈中,类中的基本数据类型放在堆里。

2.Interface 接口

接口可以多重继承,普通的类不行。
接口中只含方法和方法名字不含任何属性,抽象列不能被实例化,而接口确定ADT规约,类实现ADT,也可以不需要接口直接使用类作为ADT,既有ADT定义也有ADT实现
实际中,更倾向于用接口定义变量
关于继承
如果B继承了A,B是小集合,A是大集合,意味着A能做的事情B都能做,B继承A的方法并且可以增加新方法,最好的继承是AB操作完全复制可以修改但不要加心的操作,让任何一个B都是A(其实这里不太懂,如果完全一样的话继承有什么意义呢,还需继续学习)
一些注意
(1)接口不应该把具体的实现类带出去。
(2)继承要对接口的所有方法实现,如果父类是immutable的,子类也得immutable。
(3)子类遵循父类的特性必须程序员检测,不能被静态检测出来。
(4)接口中不能带constructor,不能进行具体实例化,(会导致拿到接口不知道如何构造实现类,包含一个静态方法来实现类,返回的一定是接口类型不是实现类型,这里也不太懂,等明白了就删改)
default方法
接口中所有子列都要实现且实现一致的方法,那可以在接口中统一,无需重复实现。
接口中的方法
(1)静态方法:带方法体
(2)default方法:带方法体
(3)子类去实现的方法:只有方法名,无方法体

3.Inheritance and Overriding 继承和重写

严格继承:子类只能添加新方法,无法重写超类中的方法(通过final来保证)
注 final的一些小知识回顾
final 加在基本数据类型/immu 就不变了
+mutable 位置引用不能变,值可以变。
+类 永远不能被继承
+方法 继承类时方法不能被重写
不提倡子类中加public的类型方法,一般在父类中有声明,防止调用不到,客户端只能调用接口中的方法,子类的方法不能调用。
下面方法和属性调用的例子:A a = new D();
方法的调用
(1)看父类中有没有这一方法,这个方法能不能被调用到,这里看前面的变量类型(A)
(2)然后看它具体类型(父类->父类方法)(子类->子类方法),这个是在运行的时候看调用的到底是哪个版本,是父类的还是子类的,看后面的类型。(D)
(编译时只看变量类型,不知道指向哪个对象,运行时才知道哪个对象)
属性的调用
属性只跟类型有关,前面的(A)
重写
super 关键字访问父类方法,不同子类同名但实现不同 的方法需要在父类声明一下,然后调用时就按照上面说的调用即可,重写的时候不要改变原方法的本意。
重载同名不同参数,对应编译重写完全copy对用运行
(以后尽量详述)
(一个子类只能对应一个父类,但父类若为接口可对用多个接口,(有些不懂,明白后修改))

4. Polymorphism, subtyping and overloading 多态、子类型、重载

重载
对方法名的复用,本质还是不同的方法,有同样的名字,但参数列表必须不一样,返回值类型可相同可不同
(重写:同一个方法子类对负类重写,参数列表必须相同,返回值可以不同(子类方法返回值可以为父类方法返回值子类,子类异常要么比父类更具体要么更少,不能比父类方法更多更宽泛的异常)(异常代表方法不能处理的事)(返回值异常都可以静态检测出来,子类方法一定要比父类方法更具体,规约更强)
(编译阶段决定具体要执行哪个方法,只是根据类型确定调用哪个重载方法)
(重写方法,运行时并不确定调用的子类还是父类的方法)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值