面向对象
面向对象基础
1. 面向对象和面向过程
1.1 定义
- 面向过程编程(POP):面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。
- 面向对象编程(OOP):面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。
1.2 面向对象优点
- 易维护:由于良好的结构和封装性,OOP 程序通常更容易维护。
- 易复用:通过继承和多态,OOP 设计使得代码更具复用性,方便扩展功能。
- 易扩展:模块化设计使得系统扩展变得更加容易和灵活。
2. 面向对象三大特征
2.1 封装
将对象的属性隐藏在对象内部,不允许外部对象直接访问对象内部的信息,但可以通过这个对象提供的方法操作属性。
2.2 继承
继承是在已存在的类的定义作为基础创建新类,新类可以增加新的数据和功能,也可以使用父类功能。
注意:
- 子类拥有父类所有属性和方法(包括私有属性和方法),但是不能访问父类的私有属性和方法。
2.3 多态
多态,顾名思义,表示一个对象具有多种的状态,具体表现为父类的引用指向子类的实例。
多态特点:
- 对象类型和引用类型之间具有继承(类)/实现(接口)的关系
- 引用类型变量发出的方法调用的到底是哪个类中的方法,必须在程序运行期间才能确定
- 多态不能调用“只在子类存在但在父类不存在”的方法
- 如果子类重写了父类的方法,真正执行的是子类重写的方法,如果子类没有重写父类的方法,执行的是父类的方法
3. 接口和抽象类
3.1 共同点
- 实例化:接口和抽象类都不能直接实例化,只能被实现或继承后才能创建具体的对象。
- 抽象方法:接口和抽象类都可以包含抽象方法。抽象方法没有方法体,必须在子类或实现类中实现。
3.2 不同点
- 设计目的:接口主要用于对类的行为进行约束,你实现了某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。
- 继承和实现:类只能单继承,接口可以多继承。同时一个类可以实现多个接口。
- 成员变量:接口中的成员变量只能是public static final类型,不能被修改且必须有初始值。抽象类就没有这个限制。
- 方法:JAVA8之前,接口的方法只能是方法声明。JAVA8起,可以在接口中定义default方法和static方法。JAVA9起,接口可以包含private方法。
4. 深拷贝,浅拷贝,引用拷贝
4.1 定义
- 深拷贝:深拷贝会完全复制整个对象,包括这个对象所包含的内部对象。
- 浅拷贝:浅拷贝会在堆上创建一个新的对象(区别于引用拷贝的一点),不过,如果原对象内部的属性是引用类型的话,浅拷贝会直接复制内部对象的引用地址,也就是说拷贝对象和原对象共用同一个内部对象。
- 引用拷贝:新开一个引用指向需要拷贝的对象。
拷贝实现可以实现Cloneable接口中的clone方法。
4.2 比较
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Icyyybro!
评论