面向对象的编程OOP

章节引入:ADT的具体实现技术:OOP、类、接口

主要内容:OOP的基本概念、多态性、Object类中的方法、好的类的设计

基本概念

object对象:含状态(filed)和行为(method)

class类:类是一种模板,可用于产生新的实例对象,类中的方法是method

注:object是真实存在的对象,class是对个体的抽象概括,并不真实存在

抽象:类方法\变量的调用——类名称.类变量\方法名——用static定义

具体:实例方法\变量的调用——需要创建对象\实例化,实例名.实例变量\方法名——无static

注:System.out.println(x)是类方法,类名是System,底层默认调用x的toString方法

静态方法只能调用静态成员,非静态方法可以调用实例化\静态成员

对静态成员,虚拟机在加载时就会在内存中生成相关对象,因此可以直接使用类名调用

对实例化成员,必须自己new一个实例

接口

接口中只有方法的定义,没有实现;

接口之间可以继承与扩展;

一个类可以实现多种接口,调用多种接口中的方法(java不支持多继承的补偿);

一个接口可以有多个实现类(List的ArrayList和LinkedList)(implement,要实现接口中所有方法,静态检查,可以增加方法)

接口确定ADT规约,类实现ADT,较好的设计还是先用接口再用类

接口中不能有构造器,无法保证所有实现都包含了构造器,用户需要中的接口某个具体实现类的名字,封装不彻底,应该在接口中定义一个静态方法实现彻底封装

使用default,在接口实现某些共同的功能,在子类型中可以被覆盖

信息隐藏

 好处:过程解耦,有利于测试、开发、使用;可并行开发,提高开发速度;能更好的定位错误;易于实现性能优化和代码复用

方法:用四种可见性控制接口加类

 继承和重写overriding

继承分为严格继承(子类只能添加新方法不能重写父类中的方法)和非严格继承(可以重写)

A final field : prevents reassignment to the field after initialization
A final method : prevents overriding the method
A final class : prevents extending the class

重写:方法签名完全相同,实际执行时调用哪个方法需要虚拟机在running时根据对象的类型确定

重写之后,在子类方法内可以用super关键字调用父类中的对应方法

要使用@Override强制编译器检查覆盖方法的签名是否一致

子类中重写的方法的可见性要与父类型一致或更加宽泛

抽象程度减弱:接口->抽象类->普通类

抽象类不能实例化(不能用new生成对象) ,继承某个抽象类的子类在实例化时,所有父类中的抽象方法必须已经实现

多态

特殊多态(重载overloading)一个方法可以有多个同名的实现

要求名字相同但参数列表不同,执行静态类型检查,在编译阶段决定具体执行哪个方法

易错习题(必考题)

重载与重写的区别(考试重难点) 

参数化多态(泛型编程)一个类型名字可以代表多个类型

在运行时会被具体指定为某个数据类型,在运行时是没有泛型L的

泛型类:运行时共享一个类  class ClassName <T,E,...>{}

泛型接口:运行时共享一个接口  interface InterfaceName <T,E,...>{}

实现时可以使用非泛型或泛型的实现类

泛型方法public <T> T Method(){}

通配符<?> <? extends Class> <? super Class>

子类型多态  一个变量名字可以代表多个类的实例

B是A的子类型\B可以替代A:要求B的规约不弱于A,A中的每个方法在B中都有实现且兼容

好处:不同类型的对象可以统一处理而无需区分,实现了很好的隔离

Object类中的方法

equals()不重写判断内存空间是否相同

hashCode()只对涉及到hash算法的有用

toString()缺省打印内存空间地址

类的设计

尽量设计不可变类,方法如下:

▪  Don’t provide any mutators
Ensure that no methods may be overridden
Make all fields final
Make all fields private
Ensure security of any mutable components (avoid rep exposure)
Implement toString(), hashCode(), clone(), equals(), etc

必须设计可变类:状态一定会发生变化(现实世界、抽象如迭代器、进程类)

可变类要尽可能减小可变性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值