JAVA封装继承与多态
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mybox.weight); } }
22
子类使用构造方法
子类构造方法总是先调用(显示或隐式地)其父 类的构造方法以创建和初始化子类中的父类成 员(super)
构造方法不能被继承,它们只属于定义它们的类. 当创建一个子类对象时,子类构造方法首先调用
父类的构造方法并执行,接着才执行子类构造方 法.
2 、 private 属 性 和方法不能被 继承。
18
19
继承的JAVA实现
class Box
{
double width;
double height;
double depth;
Box() //无参构造函数
{
width = -1;
height = -1;
depth = -1;
}
Box(double w, double h, double d) //有参构造函数
JAVA封装、继承与多态
学习目标
理解抽象和封装。 理解继承和多态。 掌握修饰符this和super的使用。
2
4.1 类的封装
含义:
java中,对象就是一个封装体。 把对象的属性和服务结合成一个独立的单位,并尽可
能隐蔽对象的内部细节(尤其是私有数据) 目的:使对象以外的部分不能随意存取对象的内部数
30
父类中操作的变量仍旧是父类的成员变量.
31
方法重写
子类可以隐藏已继承的方法,子类通过方法重 写来隐藏继承的方法。
方法重写:定义一个方法,并且这个方法的名 字、返回类型、参数个数和类型与从父类继承 的方法完全相同。
子类通过方法的重写可以把父类的状态和行为 改变为自身的状态和行为。
32
子类继承父类的speak()方法和cry()方法,但子类 通过重写speak()隐藏了继承的speak()方法。
子类自动地享用父类中拥有的属性和方法。
继承的特点
具有层次结构
子类继承了父类的 属性和方法
6
Carnivorous 类
Lion 类
Tiger 类
示例
Animals 类
父类
父类/子类 是相对的
Herbivorous 类
Cow 类
Coat 类
子类
7
继承的优点
代码的可重用性
父类的属性和方 法可用于子类
{ width = w; //继承的属性 height = h; //继承的属性 depth = d; //继承的属性 weight = m;//子类特有的属性
} }
21
继承的JAVA实现
class DemoBoxWeight {
public static void main(String args[]) {BoxWeight mybox = new BoxWeight(10,20,15,34.3); //初始化子类对象mybox double vol; vol = mybox.volume(); //调用继承的父类方法 System.out.println("箱子的体积为:" + vol); System.out.println("箱子的重量为:" +
可以轻松地自定义 子类
设计应用程序变 得更加简单
8
继承
继承是面向对象语言中最具有特色,也是与传 统最不相同的一个。
当一个类获取另一个类中所有非私有的数据和 操作的定义作为自己的部分或全部成分时,就 称为这两个类之间具有继承关系。
9
继承
例子:请确认各类之间的关系
plane military plane(军事) passenger plane (客机) cargo plane (货物) fighter plane (战斗机) Airliner (民用机)
访问父类被隐藏的成员变量,如: super.variable
调用父类中被重写的方法,如: super.Method([paramlist]);
调用父类的构造函数 ,如: super([paramlist]);
45
class Person
{
public int c;
private String name;
子类 - 绘制和移动矩形
Rectangle Draw () { DrawRectangle } Move () { MoveRectangleCorner }
一般性(父类)和特殊性(子类)
14
Continue
新类继承一般类的状态和行为,并根据需要增加自己的 状态和行为。
由继承而得到的类称为子类(sub class),被继承的类 称为父类(super class)。
父类可以是自己编写的类,也可以JAVA类库中的类。 利用继承可以有效使用代码的重复使用。 JAVA不支持多重继承,即子类只能有一个父类。
因此如果在子类的构造方法中,没有使用关键字super 调用父类的某个构造方法,那么默认有:super ( ), 即调用父类的不带参数的构造方法。
25
public class test{ A a1=new A();
A a2=new A(3); B b1=new B(); B b2=new B(4); } class A{
{
width = w;
height = h;
depth = d;
}
double volume() //计算体积
{ return width * height * depth;
}
}
20
继承的JAVA实现
class BoxWeight extends Box { double weight;
BoxWeight(double w, double h, double d, double m) //字类构造函数
} }
示
public class DemoSuper extends Person
{
public void print(){
例
super.print(); //调用父类的方法print
}
public static void main(String[] args){
DemoSuper ds=new DemoSuper();
39
Resutl?
40
以上J_superclass中的构造方法,调用mb_add是调用子
类的,操作的m_data是父类的。
41
final关键字
可以修饰变量(常量) 可以修饰方法 (不能被重写) 可以修饰类(不能再被继承)
42
43
44
super
java中通过super来实现对父类成员的访问, super用来引用当前对象的父类。使用场合:
private int age;
protected void setName(String name){
this.name=name;
}
protected void setAge(int age){
this.age=age;
}
protected void print(){
System.out.println("姓名:"+name+",年龄:"+age);
A(){ System.out.println(1);
} A(int a){
System.out.println(2); } } class B extends A{ B(){
super(3); System.out.println(3); } B(int a){ System.out.println(4); } }
dBiblioteka Baidu.setName("张三");
ds.setAge(22);
ds.print(); //调用子类的print方法
}
46
}
4.3 类的多态
多态:是指一个程序中存在着同名不同实现的方 法
作用: 同一接口,不同的实现 如:System.out.println(/*各种类型的数据*/)方 法 进一步隐藏对象内部的实现细节,简化程序设计的复 杂度
35
36
37
38
下列那个选项插入第八行,编译不会通过
A.public float getNum{return 4.0f} B.public void getNum(){} C.public void getNum(double d){} D.public void getNum(float d){return 4.0d;}
26
例子
编写一个类圆锥继承圆类(上节课完成的类) 要求:构造方法2个 成员方法:求体积和求表面积
27
私有变量是无法继承的 x 尽管是不被B继承的,但是B仍旧可以通过继 承方法f()来操作x.
28
29
成员变量隐藏
当子类中定义的成员变量只要和父类中的 成员变量同名时,子类就隐藏了继承的成 员变量。
10
军事机
战斗机
飞机 民用机r
货物机
客机
11
Public class Employee {
String name; Date hireDate; Date dateofBirth; String jobTitle int grade;
public String getDetails() }
Public class Manager {
如果子类没有构造方法,则它继承父类无参 数的构造方法作为自己的构造方法
23
构造方法的自动调用
子类继承父类的时候,自动调用父类的构造方法
24
CONTINUE
如果子类的构造方法没有明显指明使用父类的哪个构造 方法,子类就调用父类的不带参数的构造方法。
Super关键字可以调用父类的构造方法,但是必须使用 在子类的构造方法中,并且只能是第一条语句
17
继承的实现
[修饰符]class 类名 [extends 父类] { 成员变量声明;
成员方法声明; }
子类中新增加的属性和方法是对父类的 扩展
子类中定义的与父类同名的属性是对父 类属性的隐藏,同名的方法是对父类方 法的覆盖
说明:
1、子类将自动 继承父类中的 protected 和 public等修饰的 非私有属性和 方法。
在cry方法中调用speak方法,调用的哪一个?
33
34
Super操作被隐藏的成员
如果子类和父类的成员变量同名时,子类就隐藏了从父 类继承的成员变量。当子类定义一个方法,并且这个方 法的名字、返回类型,参数个数和类型与父类的某个方 法完全相同是,子类从父类继承的这个方法将隐藏。
我们要调用父类隐藏的成员,我们可以使用super: super.成员变量; super.成员方法;
15
继承的定义
子类的成员有一部分是子类自己声明定义的。 另一部分是从它的父类继承的。 子类继承父类的成员变量作为自己的一个成员
变量。 继承父类的方法作为自己的方法。
16
CONTINUE
使用关键字extends来声明一个类是另一个类的子类。 格式如下: class 子类名 extends 父类名 例如: class students extends People { }
有选择地提供数据
4
封装特性
体现
设置对象中的成员变量和方法的访问权限 (public,private,protected,缺省);
提供一个统一供其他类引用的访问接口,如一些 public方法;
其它对象不能直接修改本对象所拥有的私有属性和私 有方法
包:类空间的划分单位
5
4.2 类的继承
含义:
Public class manager extends employee {
String department; public void Guide() }
关键字extends 是解决继承问题的
13
继承
类之间的继承关系是面向对象程序设计语 言的基本特征
一个类(子类)是另一个类(父类)的特 例。父类是被继承的,子类是继承的
String name; Date hireDate; Date dateofBirth; String jobTitle int grade; String Department; public String getDetails() public void Guide() }
12
Continue
表现形式:
重载:即在同一类中定义多个同名的不同方法。 覆盖:子类中对父类方法进行重写(重新定义),但
具体实现不一样
47
多态性
父类 Shape
Draw () Move ()
子类 - 绘制和移动三角形
Triangle Draw () { DrawTraingle } Move () { MoveTriangleVertices }
据(如属性),从而,使软件错误能够局部化,大大 减少查错和排错的难度。
“隐藏属性、方法或实现细节的过程称为封装。”
3
法拉力公司
封装的示例
迪斯尼汽车公司
公共
电话号码 电子邮箱 产品种类
私有
备件的制造方法 备件库存 备件的制造成本
公共
电话号码 电子邮箱 汽车种类
私有
汽车的组装方法 汽车库存 汽车的组装成本
22
子类使用构造方法
子类构造方法总是先调用(显示或隐式地)其父 类的构造方法以创建和初始化子类中的父类成 员(super)
构造方法不能被继承,它们只属于定义它们的类. 当创建一个子类对象时,子类构造方法首先调用
父类的构造方法并执行,接着才执行子类构造方 法.
2 、 private 属 性 和方法不能被 继承。
18
19
继承的JAVA实现
class Box
{
double width;
double height;
double depth;
Box() //无参构造函数
{
width = -1;
height = -1;
depth = -1;
}
Box(double w, double h, double d) //有参构造函数
JAVA封装、继承与多态
学习目标
理解抽象和封装。 理解继承和多态。 掌握修饰符this和super的使用。
2
4.1 类的封装
含义:
java中,对象就是一个封装体。 把对象的属性和服务结合成一个独立的单位,并尽可
能隐蔽对象的内部细节(尤其是私有数据) 目的:使对象以外的部分不能随意存取对象的内部数
30
父类中操作的变量仍旧是父类的成员变量.
31
方法重写
子类可以隐藏已继承的方法,子类通过方法重 写来隐藏继承的方法。
方法重写:定义一个方法,并且这个方法的名 字、返回类型、参数个数和类型与从父类继承 的方法完全相同。
子类通过方法的重写可以把父类的状态和行为 改变为自身的状态和行为。
32
子类继承父类的speak()方法和cry()方法,但子类 通过重写speak()隐藏了继承的speak()方法。
子类自动地享用父类中拥有的属性和方法。
继承的特点
具有层次结构
子类继承了父类的 属性和方法
6
Carnivorous 类
Lion 类
Tiger 类
示例
Animals 类
父类
父类/子类 是相对的
Herbivorous 类
Cow 类
Coat 类
子类
7
继承的优点
代码的可重用性
父类的属性和方 法可用于子类
{ width = w; //继承的属性 height = h; //继承的属性 depth = d; //继承的属性 weight = m;//子类特有的属性
} }
21
继承的JAVA实现
class DemoBoxWeight {
public static void main(String args[]) {BoxWeight mybox = new BoxWeight(10,20,15,34.3); //初始化子类对象mybox double vol; vol = mybox.volume(); //调用继承的父类方法 System.out.println("箱子的体积为:" + vol); System.out.println("箱子的重量为:" +
可以轻松地自定义 子类
设计应用程序变 得更加简单
8
继承
继承是面向对象语言中最具有特色,也是与传 统最不相同的一个。
当一个类获取另一个类中所有非私有的数据和 操作的定义作为自己的部分或全部成分时,就 称为这两个类之间具有继承关系。
9
继承
例子:请确认各类之间的关系
plane military plane(军事) passenger plane (客机) cargo plane (货物) fighter plane (战斗机) Airliner (民用机)
访问父类被隐藏的成员变量,如: super.variable
调用父类中被重写的方法,如: super.Method([paramlist]);
调用父类的构造函数 ,如: super([paramlist]);
45
class Person
{
public int c;
private String name;
子类 - 绘制和移动矩形
Rectangle Draw () { DrawRectangle } Move () { MoveRectangleCorner }
一般性(父类)和特殊性(子类)
14
Continue
新类继承一般类的状态和行为,并根据需要增加自己的 状态和行为。
由继承而得到的类称为子类(sub class),被继承的类 称为父类(super class)。
父类可以是自己编写的类,也可以JAVA类库中的类。 利用继承可以有效使用代码的重复使用。 JAVA不支持多重继承,即子类只能有一个父类。
因此如果在子类的构造方法中,没有使用关键字super 调用父类的某个构造方法,那么默认有:super ( ), 即调用父类的不带参数的构造方法。
25
public class test{ A a1=new A();
A a2=new A(3); B b1=new B(); B b2=new B(4); } class A{
{
width = w;
height = h;
depth = d;
}
double volume() //计算体积
{ return width * height * depth;
}
}
20
继承的JAVA实现
class BoxWeight extends Box { double weight;
BoxWeight(double w, double h, double d, double m) //字类构造函数
} }
示
public class DemoSuper extends Person
{
public void print(){
例
super.print(); //调用父类的方法print
}
public static void main(String[] args){
DemoSuper ds=new DemoSuper();
39
Resutl?
40
以上J_superclass中的构造方法,调用mb_add是调用子
类的,操作的m_data是父类的。
41
final关键字
可以修饰变量(常量) 可以修饰方法 (不能被重写) 可以修饰类(不能再被继承)
42
43
44
super
java中通过super来实现对父类成员的访问, super用来引用当前对象的父类。使用场合:
private int age;
protected void setName(String name){
this.name=name;
}
protected void setAge(int age){
this.age=age;
}
protected void print(){
System.out.println("姓名:"+name+",年龄:"+age);
A(){ System.out.println(1);
} A(int a){
System.out.println(2); } } class B extends A{ B(){
super(3); System.out.println(3); } B(int a){ System.out.println(4); } }
dBiblioteka Baidu.setName("张三");
ds.setAge(22);
ds.print(); //调用子类的print方法
}
46
}
4.3 类的多态
多态:是指一个程序中存在着同名不同实现的方 法
作用: 同一接口,不同的实现 如:System.out.println(/*各种类型的数据*/)方 法 进一步隐藏对象内部的实现细节,简化程序设计的复 杂度
35
36
37
38
下列那个选项插入第八行,编译不会通过
A.public float getNum{return 4.0f} B.public void getNum(){} C.public void getNum(double d){} D.public void getNum(float d){return 4.0d;}
26
例子
编写一个类圆锥继承圆类(上节课完成的类) 要求:构造方法2个 成员方法:求体积和求表面积
27
私有变量是无法继承的 x 尽管是不被B继承的,但是B仍旧可以通过继 承方法f()来操作x.
28
29
成员变量隐藏
当子类中定义的成员变量只要和父类中的 成员变量同名时,子类就隐藏了继承的成 员变量。
10
军事机
战斗机
飞机 民用机r
货物机
客机
11
Public class Employee {
String name; Date hireDate; Date dateofBirth; String jobTitle int grade;
public String getDetails() }
Public class Manager {
如果子类没有构造方法,则它继承父类无参 数的构造方法作为自己的构造方法
23
构造方法的自动调用
子类继承父类的时候,自动调用父类的构造方法
24
CONTINUE
如果子类的构造方法没有明显指明使用父类的哪个构造 方法,子类就调用父类的不带参数的构造方法。
Super关键字可以调用父类的构造方法,但是必须使用 在子类的构造方法中,并且只能是第一条语句
17
继承的实现
[修饰符]class 类名 [extends 父类] { 成员变量声明;
成员方法声明; }
子类中新增加的属性和方法是对父类的 扩展
子类中定义的与父类同名的属性是对父 类属性的隐藏,同名的方法是对父类方 法的覆盖
说明:
1、子类将自动 继承父类中的 protected 和 public等修饰的 非私有属性和 方法。
在cry方法中调用speak方法,调用的哪一个?
33
34
Super操作被隐藏的成员
如果子类和父类的成员变量同名时,子类就隐藏了从父 类继承的成员变量。当子类定义一个方法,并且这个方 法的名字、返回类型,参数个数和类型与父类的某个方 法完全相同是,子类从父类继承的这个方法将隐藏。
我们要调用父类隐藏的成员,我们可以使用super: super.成员变量; super.成员方法;
15
继承的定义
子类的成员有一部分是子类自己声明定义的。 另一部分是从它的父类继承的。 子类继承父类的成员变量作为自己的一个成员
变量。 继承父类的方法作为自己的方法。
16
CONTINUE
使用关键字extends来声明一个类是另一个类的子类。 格式如下: class 子类名 extends 父类名 例如: class students extends People { }
有选择地提供数据
4
封装特性
体现
设置对象中的成员变量和方法的访问权限 (public,private,protected,缺省);
提供一个统一供其他类引用的访问接口,如一些 public方法;
其它对象不能直接修改本对象所拥有的私有属性和私 有方法
包:类空间的划分单位
5
4.2 类的继承
含义:
Public class manager extends employee {
String department; public void Guide() }
关键字extends 是解决继承问题的
13
继承
类之间的继承关系是面向对象程序设计语 言的基本特征
一个类(子类)是另一个类(父类)的特 例。父类是被继承的,子类是继承的
String name; Date hireDate; Date dateofBirth; String jobTitle int grade; String Department; public String getDetails() public void Guide() }
12
Continue
表现形式:
重载:即在同一类中定义多个同名的不同方法。 覆盖:子类中对父类方法进行重写(重新定义),但
具体实现不一样
47
多态性
父类 Shape
Draw () Move ()
子类 - 绘制和移动三角形
Triangle Draw () { DrawTraingle } Move () { MoveTriangleVertices }
据(如属性),从而,使软件错误能够局部化,大大 减少查错和排错的难度。
“隐藏属性、方法或实现细节的过程称为封装。”
3
法拉力公司
封装的示例
迪斯尼汽车公司
公共
电话号码 电子邮箱 产品种类
私有
备件的制造方法 备件库存 备件的制造成本
公共
电话号码 电子邮箱 汽车种类
私有
汽车的组装方法 汽车库存 汽车的组装成本