收藏 分享(赏)

JAVA封装、继承与多态.ppt

上传人:HR专家 文档编号:7282207 上传时间:2019-05-12 格式:PPT 页数:54 大小:1.25MB
下载 相关 举报
JAVA封装、继承与多态.ppt_第1页
第1页 / 共54页
JAVA封装、继承与多态.ppt_第2页
第2页 / 共54页
JAVA封装、继承与多态.ppt_第3页
第3页 / 共54页
JAVA封装、继承与多态.ppt_第4页
第4页 / 共54页
JAVA封装、继承与多态.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

1、1,第4章 封装、继承与多态,2,学习目标,理解抽象和封装。 理解继承和多态。 掌握修饰符this和super的使用。,3,4.1 类的封装,含义: java中,对象就是一个封装体。 把对象的属性和服务结合成一个独立的单位,并尽可能隐蔽对象的内部细节(尤其是私有数据) 目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而,使软件错误能够局部化,大大减少查错和排错的难度。,“隐藏属性、方法或实现细节的过程称为封装。”,4,封装的示例,有选择地提供数据,法拉力公司,迪斯尼汽车公司,5,封装特性,体现 设置对象中的成员变量和方法的访问权限(public,private,protected

2、,缺省); 提供一个统一供其他类引用的访问接口,如一些public方法; 其它对象不能直接修改本对象所拥有的私有属性和私有方法 包:类空间的划分单位,6,4.2 类的继承,含义: 子类自动地享用父类中拥有的属性和方法。,7,父 类,子类,示例,8,9,继承,继承是面向对象语言中最具有特色,也是与传统最不相同的一个。 当一个类获取另一个类中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称为这两个类之间具有继承关系。,10,继承,例子:请确认各类之间的关系 plane military plane(军事) passenger plane (客机) cargo plane (货物) fi

3、ghter plane (战斗机) Airliner (民用机),11,飞机,军事机,民用机r,战斗机,货物机,客机,12,Public class Employee String name;Date hireDate;Date dateofBirth;String jobTitleint grade;public String getDetails() ,Public class Manager String name;Date hireDate;Date dateofBirth;String jobTitleint grade;String Department;public String

4、 getDetails()public void Guide() ,13,Continue,Public class manager extends employee String department;public void Guide(),关键字extends 是解决继承问题的,14,继承,类之间的继承关系是面向对象程序设计语言的基本特征 一个类(子类)是另一个类(父类)的特例。父类是被继承的,子类是继承的 一般性(父类)和特殊性(子类),15,Continue,新类继承一般类的状态和行为,并根据需要增加自己的状态和行为。 由继承而得到的类称为子类(sub class),被继承的类称为父类

5、(super class)。 父类可以是自己编写的类,也可以JAVA类库中的类。 利用继承可以有效使用代码的重复使用。 JAVA不支持多重继承,即子类只能有一个父类。,16,继承的定义,子类的成员有一部分是子类自己声明定义的。 另一部分是从它的父类继承的。 子类继承父类的成员变量作为自己的一个成员变量。 继承父类的方法作为自己的方法。,17,CONTINUE,使用关键字extends来声明一个类是另一个类的子类。 格式如下:class 子类名 extends 父类名 例如:class students extends People ,18,继承的实现,修饰符class 类名 extends 父

6、类 成员变量声明;成员方法声明; ,说明: 1、子类将自动继承父类中的protected和public等修饰的非私有属性和方法。 2、private属性和方法不能被继承。,子类中新增加的属性和方法是对父类的扩展 子类中定义的与父类同名的属性是对父类属性的隐藏,同名的方法是对父类方法的覆盖,19,20,继承的JAVA实现,class Box double width; double height; double depth;Box() /无参构造函数 width = -1; height = -1;depth = -1;Box(double w, double h, double d) /有参构

7、造函数 width = w; height = h; depth = d; double volume() /计算体积 return width * height * depth; ,21,继承的JAVA实现,class BoxWeight extends Box double weight; BoxWeight(double w, double h, double d, double m) /字类构造函数 width = w; /继承的属性height = h; /继承的属性depth = d; /继承的属性weight = m; /子类特有的属性 ,22,继承的JAVA实现,class D

8、emoBoxWeight public static void main(String args) BoxWeight mybox = new BoxWeight(10,20,15,34.3); /初始化子类对象myboxdouble vol;vol = mybox.volume(); /调用继承的父类方法System.out.println(“箱子的体积为:“ + vol); System.out.println(“箱子的重量为:“ + mybox.weight); ,23,子类使用构造方法,子类构造方法总是先调用(显示或隐式地)其父类的构造方法以创建和初始化子类中的父类成员(super)

9、构造方法不能被继承,它们只属于定义它们的类. 当创建一个子类对象时,子类构造方法首先调用父类的构造方法并执行,接着才执行子类构造方法. 如果子类没有构造方法,则它继承父类无参数的构造方法作为自己的构造方法,24,构造方法的自动调用,子类继承父类的时候,自动调用父类的构造方法,25,CONTINUE,如果子类的构造方法没有明显指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。 Super关键字可以调用父类的构造方法,但是必须使用在子类的构造方法中,并且只能是第一条语句 因此如果在子类的构造方法中,没有使用关键字super调用父类的某个构造方法,那么默认有:super ( ),即调用

10、父类的不带参数的构造方法。,26,public class testA a1=new A();A a2=new A(3);B b1=new B();B b2=new B(4); class AA()System.out.println(1);A(int a)System.out.println(2); class B extends AB()super(3);System.out.println(3);B(int a)System.out.println(4);,27,例子,编写一个类圆锥继承圆类(上节课完成的类) 要求:构造方法2个 成员方法:求体积和求表面积,28,私有变量是无法继承的 x

11、 尽管是不被B继承的,但是B仍旧可以通过继承方法f()来操作x.,29,30,成员变量隐藏,当子类中定义的成员变量只要和父类中的成员变量同名时,子类就隐藏了继承的成员变量。,31,父类中操作的变量仍旧是父类的成员变量.,32,方法重写,子类可以隐藏已继承的方法,子类通过方法重写来隐藏继承的方法。 方法重写:定义一个方法,并且这个方法的名字、返回类型、参数个数和类型与从父类继承的方法完全相同。 子类通过方法的重写可以把父类的状态和行为改变为自身的状态和行为。,33,子类继承父类的speak()方法和cry()方法,但子类通过重写speak()隐藏了继承的speak()方法。,在cry方法中调用s

12、peak方法,调用的哪一个?,34,35,Super操作被隐藏的成员,如果子类和父类的成员变量同名时,子类就隐藏了从父类继承的成员变量。当子类定义一个方法,并且这个方法的名字、返回类型,参数个数和类型与父类的某个方法完全相同是,子类从父类继承的这个方法将隐藏。 我们要调用父类隐藏的成员,我们可以使用super:super.成员变量;super.成员方法;,36,37,38,39,下列那个选项插入第八行,编译不会通过,A.public float getNumreturn 4.0f B.public void getNum() C.public void getNum(double d) D.p

13、ublic void getNum(float d)return 4.0d;,40,Resutl?,41,以上J_superclass中的构造方法,调用mb_add是调用子类的,操作的m_data是父类的。,42,final关键字,可以修饰变量(常量) 可以修饰方法 (不能被重写) 可以修饰类(不能再被继承),43,44,45,super,java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。使用场合: 访问父类被隐藏的成员变量,如:super.variable 调用父类中被重写的方法,如:super.Method(paramlist); 调用父类的构造函数 ,如:

14、 super(paramlist);,46,class Person public int c; private String name; 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); public class DemoSuper extends Person public void

15、print() super.print(); /调用父类的方法print public static void main(String args) DemoSuper ds=new DemoSuper(); ds.setName(“张三“); ds.setAge(22); ds.print(); /调用子类的print方法 ,示例,47,4.3 类的多态,多态:是指一个程序中存在着同名不同实现的方法 作用: 同一接口,不同的实现 如:System.out.println(/*各种类型的数据*/)方法 进一步隐藏对象内部的实现细节,简化程序设计的复杂度 表现形式: 重载:即在同一类中定义多个同名

16、的不同方法。 覆盖:子类中对父类方法进行重写(重新定义),但具体实现不一样,48,多态性,父类,子类 - 绘制和移动三角形,子类 - 绘制和移动矩形,子类 - 绘制和移动五边形,49,方法的重载,重载是指在同一类中,同一个方法名被定义多次,但采用不同的形式参数列表,包括形参的个数、类型、顺序的不同来区分重载的方法。在运行时自动选择正确的方法进行调用称作动态绑定。,50,方法的覆盖,Java允许子类对父类的同名方法进行重新定义,也就是子类中定义的方法与父类中已定义的方法名相同,但方法的内容不同,这种多态就称为方法覆盖。由于父类与子类有同名方法,所以在引用方法时需要指明引用的是父类的方法还是子类的

17、方法。,51,方法的覆盖,构成条件 子父类方法同名 返回类型相同 参数相同 子类方法的访问权限不能低于父类。 引用该方法时,自动隐藏父类的该方法,若要访问,则用super.方法来进行。,52,示例,class Square int length;Square(int len) length=len; void getPerimeter()System.out.println(“正方形的周长为 “+(4* length); class Rectangle extends Square int width;Rectangle(int len,int wid) super(len);width=wi

18、d; void getPerimeter()System.out.println(“长方形的周长为 “+(2* (length+ width);,重写,53,示例(续),public class CalculatePerimeter public static void main(String args)Square sqObj=new Square(10);sqObj. getPerimeter();Square rectObj=new Rectangle(10,12);rectObj. getPerimeter();/引用子类的方法 ,54,总结,封装、继承和多态是面向对象的主要特征 继承可提高代码的重用性,使用extends关键字来实现。除了构造方法之外,父类的所有方法和属性都被子类的对象继承 多态性是不同的实例对象以不同的方式对相同的信息作出不同的表现 访问修饰符用于确定访问类成员的方式,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报