面向对象的三大特征
什么是面向对象:
现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
一、封装
目的:隐藏类或方法的实现细节
让使用者只能通过事先定制好的方法来访问数据。
便于修改,增强代码的可维护性。
简单来说就是:将对象的属性和行为封装起来,不需要让外界知道具体实现细节。
高内聚,低耦合
二、继承
继承是多态的前提,没有继承,就没有多态。继承主要解决的问题就是共性抽取。
概念:子类(也称派生类,导出类)继承父类(也称超类,基类),父类就是类中通用的共性。
父类和子类的关系是(is ----a),子类只有一个父类。
意义:复用代码---子类拥有父类的所有可见成员。
不同的类具有某些共同的属性和行为。
实现多态。
继承的实现
使用extends关键字,形式如下:
class 子类名 extends 父类名{
//类体
}
所有的类都直接或间接承接于java.lang.Object
protected关键字
protected可以在同类,同一包中的类,子类被调用,不能被其他包中的类调用。
当类希望被继承时,某已成员可以被子类访问,则应使用protected修饰该成员。
super关键字
指向父类实例的引用
用来显式访问父类成员或构造方法
方法重载和方法覆盖(重写)
方法名称和参数列表不一致(方法重载)
方法名称和参数列表一致(方法覆盖)
三、多态
在同一继承树上的不同对象针对同一行为的不同表现。
(有继承关系同时有方法的覆盖)
例如,当听到“Cut” 这个单词时,理发师的行为表现是剪发,演员的行为表现是停止表演等。不同的对象,所表现的行为是不一样的。
格式:
父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称();
例如:学生既是学生也是人。(两种形态:学生 人)
类型变换
向上转型(子类转为父类)自动转换(隐性转换)
Dog dog = new PetDog();
向下转型(父类转为子类)须强制类型转换
PetDog petDog = (PetDog)dog
instanceof运算符
对象名称 instanceof 类名
(判断这个对象是否是类的实例)
Object类
构造方法:Object()
常用操作:equals和toString
“火锅底料”例子说明三者之间的关系
用一个例子来说明三者间的关系:
“火锅底料”,火锅店老板在生产火锅底料的时候,不想要其他人知道它好吃的秘诀,就用封装的方法把它配料的秘诀隐藏起来。但是每次一锅一锅进行火锅底料的熬煮,很浪费时间和空间,这个时候火锅老板就想到用继承的方法,把相同的佐料直接压缩成一包一包的,不用每次去熬煮火锅底料,就不用重复去做相同的事情。但是过了一段事件后,顾客反应火锅底料有点单调,没有特色,这个时候火锅点老板就想出其他口味的火锅底料来满足顾客。