面向对象的三大基本特征和五大基本原则
虽然都是一些基础的问题,面试人人都能答的上来都有哪些基本特征和基本原则,背完之后暗道好险还好没有忘,但是细节的使用和体现在哪些方面,想要流利地说出来并举出几个例子可能有点困难(我是这样的),所以还是总结一下。
三大基本特征
1.封装
- 定义:把对象的属性和操作(或服务)结合为一个独立的整体,即属性私有化,根据需要提供setter和getter方法来访问,尽可能隐藏对象的内部实现细节。
- 特点:使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员。我们常用的USB接口,使用时需要外设且只需要将设备接入USB接口中,而内部是如何工作的,对于使用者来说并不重要,USB接口就是对外提供的访问接口。
- 目的:增强数据安全性,不让其他用户随意访问和修改数据,简化编程。
2.继承
- 定义:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
- 特点:
- 只支持单继承,即一个子类只允许有一个父类,但是可以实现多级继承,及子类拥有唯一的父类,而父类还可以再继承。
- 子类可以拥有父类的属性和方法。
- 子类可以拥有自己的属性和方法。
- 子类可以重写覆盖父类的方法。
- 目的:实现代码地复用。
- 使用:
-
无论是成员变量还是成员方法,都是先在当前类中找,如果没有都是向上父类中查找,绝对不会向下查找子类的。
-
局部成员变量:直接使用;本类成员变量:this.成员变量;父类成员变量:super.父类成员变量
-
this和super关键字的用法
super()关键字的用法: - 子类的成员方法中,访问父类的成员变量。 - 子类的成员方法中,访问父类的成员方法。 - 子类的构造方法中,访问父类的构造方法。 this关键字用法: - 本类成员方法中,访问本类的成员变量。 - 本类成员方法中,访问本类的另一个成员方法。 - 本类的构造方法中,访问本类的另一个构造方法。
-
构造器
继承关系中,父子类构造方法的访问特点:- 在子类构造方法中有一个默认隐含的super();调用,因此一定是先调用父类构造方法,再调用子类构造方法。
- 子类构造可以通过super();调用父类的重载构造。(重载)
- super();的父类调用构造方法,必须在子类构造中的第一行,就是第一个;号结束的元素,并且只能调用一次。
-
3.多态
- 定义:同一个实体同时具有多种形式。表现形式为:基类引用指向子类对象。例如:上转型对象,接口回调。
- 特点:
1.消除类型之间的耦合关系,实现低耦合。
2.灵活性。
3.可扩充性。
4.可替换性。 - 目的:增加代码的灵活度。
- 使用:
- 上转型对象
子声明对象的引用赋值给父类声明的对象,那么这个父类对象就是子类对象的上转型对象。具体示例如下:
// 父类名称 对象名 = new 子类名称(); class Animal { void eat() { System.out.println("动物吃饭!"); } } class Dog implements Animal { public void eat(){ System.out.println("小狗吃饭!"); } } 主类:{ Animal animal = new Dog(); animal.eat(); }
- 接口回调
实现该接口的类创建的对象的引用赋值给该接口声明的接口变量。接口变量调用接口声明的抽象方法(已经被实现类重写)即接口回调。具体示例如下:
// 接口名称 接口变量 = new 实现类名称(); interface Animal { void eat(); } class Dog implements Animal { public void eat(){ System.out.println("小狗吃饭!"); } } 主类:{ Animal animal = new Dog(); animal.eat(); }
- 上转型对象
五大基本特征
- 单一职责原则
就一个类而言,应该仅有一个引起它变化的原因,应该只有一个职责。如果一个类有一个以上的职责,这些职责就耦合在了一起,而且当一个职责发生变化时,可能会影响其它的职责。 - 开放封闭原则
象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的。这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。 - 里氏替换原则
任何基类可以出现的地方,子类一定可以出现。里氏替换原则是对“开-闭”原则的补充,实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏替换原则是对实现抽象化的具体步骤的规范。 - 依赖倒置原则
程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。 - 接口隔离原则
客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。如果出现接口中用不到的方法,可以抽离子接口,使用多个专门的接口比使用单个接口要好的多。
第一次记录自己的学习笔记,如果您发现问题,欢迎指点。