You are on page 1of 44

类的封装

请为我做一份香辣肉
丝。

Jack 开始切辣椒、洗蔬菜、烹
饪香辣肉丝

请问厨师叫什么名
字?

Jack Chen

请让厨师给我切一点葱
花。

Jack 切辣椒
封装
看不到

能看到

属性 行为
请为我做一份香辣肉
丝。

Jack 开始切辣椒、洗蔬菜、烹
饪香辣肉丝

请问厨师叫什么名
厨师 字? 我
Jack Chen

请让厨师给我切一点葱
花。

Jack 切辣椒
封装的思想

“ 假如你吃了个鸡蛋觉得不错,
何必要认识那个下蛋的母鸡
呢?”

—— 钱钟书
对象的选择
康师傅红烧牛
Can I help
肉面,就是这
you ,sir? 个味!
请让厨师为我做一份香辣肉
丝。

您的菜好了,请慢用。

请问厨师叫什么名字?
服务生 我
抱歉,餐厅不提供此项服
务。

请让厨师给我切一点葱花。

抱歉,餐厅不提供此项服
务。
封装思想的总结

将对象的属性和行为封
类 无法访问
装起来,而将对象的属
性和行为封装起来的载
体就是类,类通常对客 属性 行为
可以访问
户隐藏其实现细节,这
就是封装的思想。

对象
类的继承
继承
3G
照相
上网
听音乐 上网
聊天 上网
听音乐
聊天

继承
打游戏

打游戏
看视频 看视频
当菜板
充电
extends 关键字

语法 Child extends Parents extends 后面只


可以有一个父类

public class Pad extends Computer{


示例

……
}
方法的重写

打开图片
用鼠标点 用手指点触
重写了父类的方法 摸屏
super 关键字

语法 super.property;
super.method();

public class Pad extends Computer{


public void do(){
示例

super.do();
}
}
两点注意

Java 语言中,一个类只可以有一个父类!

子类不仅会覆盖父类的方法,还会覆盖父类的属
性!
instanceof 关键字
使用 instanceof 判断是否存在继承关系

父类名称
子类对象 instanceof
接口名称

class A C c = new C();

class B
c instanceof B true
class C
c instanceof A true
多态
多态
同一个变量,同一个方法,执行出不同的结果

动物 移动 ()

鲤鱼 游过去

老鹰 飞过去

斑马 跑过去
Object 类
所有类的父类

n public class Person { }

类2
public class Person extends Object { }
类1

基类( object )
Object 类的三个常用方法
getClass()

• 返回对象执行时的 Class 实例

toString()

• 将对象返回为字符串形式

equals()

• 比较两个对象是否相等
方法的重载
方法的重载

嚼 吃 喝
吃 咬
吃 舔

方法的重载
怎样构成方法的重载?

1. 方法名相同,参数个数不同。

2. 方法名相同,参数顺序不同。
只有返回类型不
同并不足以区分
3. 方法名相同,参数类型不同。 两个方法的重载

4. 方法名相同,参数不同,且返回类型也不同。
类的上下转型
类的上下转型

动物 父类

向下转型
向上转型

子类
类的向上转型

语法 Parents object = new Child() ;

用父类声 用子类实
明对象 例化对象
示例

Person tom = new Student() ;

这是一个人 被叫做 tom tom 是一个学生


类的向下转型 大家好,
我是 tom

Parents p = new Parents () ;


语法
Child c = (Child)p;

必须使用强制转换

这里有一个人,我们叫他 tom

Person tom = new Person() ;


示例

Doctor dr_tom = (Doctor)tom;

我们这里需要医生!快让 tom 来当医生!


instanceof 关键字

语法 boolean result = child instanceof parents

instanceof

instanceof
抽象类
什么是抽象类?
它长
抽象类 什么
样子
abstract class 颜色 { } ?
什么是抽象方法?
抽象类
abstract class 老师 { 老师讲
抽象方法 的 是哪门
课?
abstract
void 讲课void
(){ 讲课
} () ;

}
没有大括号
如何利用抽象方法

系统架构师使用抽象的方法设计出一个程序
的整体架构,然后再交给程序员来实现这些
方法。
海鸥
具体

抽象 抽象
动物 鸟
具体 鸡
接口
什么是接口?
接口的声明及实现
图形类
void draw()
void
doAnything()
extends

三角形类 四边形类 N 边形类


void draw() void draw() void draw()
void doAnything() void doAnything() void doAnything()

extends

正方形类 平行四边形类
void draw() void draw()
void doAnything() void doAnything()
接口的声明及实现
图形类
接口
void draw()
void void draw()
doAnything()
extends
implements

三角形类 四边形类 N 边形类


void draw() void draw() void draw()
void doAnything() void doAnything() void doAnything()

extends

正方形类 平行四边形类
void draw() void draw()
void doAnything() void doAnything()
多重继承
接口继承接口 VS 类实现接口

interface intf1 {
class 类名 implements
语法 } 语法 接口 1, 接口 2,…, 接口 n
interface intf2 extends intf1 {
}

步兵可以射击,医务兵既可以射击又可以治疗他人
接口与抽象类的对比
抽象类
抽象类是对根源的抽象
VS 接口
接口是对动作的抽象
五个不同点
1. 子类只能继承一个抽象类,但可以实现任意多个接口

2. 抽象类中的成员变量可以是各种类型,接口中的成员变量只能是静态常

3. 抽象类中可以有静态方法和静态代码块等,接口中不可以

4. 接口没有构造方法,抽象类可以有构造方法

You might also like