类的封装、继承和多态ppt课件.ppt

上传人:小飞机 文档编号:1359623 上传时间:2022-11-13 格式:PPT 页数:55 大小:458.50KB
返回 下载 相关 举报
类的封装、继承和多态ppt课件.ppt_第1页
第1页 / 共55页
类的封装、继承和多态ppt课件.ppt_第2页
第2页 / 共55页
类的封装、继承和多态ppt课件.ppt_第3页
第3页 / 共55页
类的封装、继承和多态ppt课件.ppt_第4页
第4页 / 共55页
类的封装、继承和多态ppt课件.ppt_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《类的封装、继承和多态ppt课件.ppt》由会员分享,可在线阅读,更多相关《类的封装、继承和多态ppt课件.ppt(55页珍藏版)》请在三一办公上搜索。

1、Java程序设计实用教程(第3版),第3章 类的封装、继承和多态,3.1 类和对象3.2 类的封装性3.3 类的继承性3.4 类的多态性3.5 类的抽象性,Java程序设计实用教程(第3版),3.1 类和对象,类(class):是既包括数据又包括作用于数据的一组操作的封装体。 对象(object):是类的实例(instance)。 类具有封装性、继承性、多态性和抽象性。3.1.1 类3.1.2 对象,Java程序设计实用教程(第3版),3.1.1 类,声明类类声明 成员变量的声明; 成员方法的声明及实现;修饰符 class 类 extends 父类 implements 接口列表,类结构,Ja

2、va程序设计实用教程(第3版),3.1.1 类,声明成员变量和成员方法声明成员变量格式: 修饰符 数据类型 变量=表达式 ,变量=表达式;声明成员方法格式: 修饰符 返回值类型 方法(参数列表) throws 异常类 语句序列; return 返回值; ,Java程序设计实用教程(第3版),3.1.1 类,ublic class MyDate /类声明 int year,month,day; /成员变量 void set(int y,int m,int d) /成员方法 year=y; /设置日期值 month=m; day=d; ,例3.1 声明日期类,Java程序设计实用教程(第3版),3

3、.1.1 类,3.成员方法重载 void set(int y,int m,int d) /重载方法,参数个数不同 void set(int m,int d) void set(int d) void set(MyDate d) /重载方法,参数数据类型不同以下方法是错误的:void set(int y,int m,int d)void set(int m,int d,int y),Java程序设计实用教程(第3版),3.1.2 对象,一个对象的生命周期是: 创建运行消亡。 声明对象 类 对象 MyDate d; 创建实例 对象 = new 类的构造方法(参数列表) d=new MyDate()

4、;或 MyDate d=new MyDate();,Java程序设计实用教程(第3版),3.1.2 对象,3. 引用对象的成员变量和调用对象方法引用成员变量 对象.成员变量 如: d.year=2008;调用成员方法 对象.成员方法(参数列表) 如: d.set(2009,7,28);Java语言回收机制自动释放对象。 【例3.1】声明日期类及使用日期对象。,ublic class MyDate /类声明 int year,month,day; /成员变量,表示年、月、日 void set(int y,int m,int d) /成员方法,设置日期值 /无返回值,有3个参数 year = y;

5、 month = m; day = d; void set(MyDate d) /将当前对象值设置为参数值,重载 set(d.year,d.month,d.day); /调用重载的同名成员方法 public String toString() /返回中文日期字符串 return year+”年”+month+”月”+day+”日”; public boolean equals(MyDate d) /比较当前日期值与d是否相等 return this=d|d!=null /this指代调用本方法的当前对象,3.1.2 对象,ublic static void main(String args)

6、MyDate d1 = new MyDate() ; /声明对象,创建实例,引用赋值 d1.set(2009,7,16); /调用类的成员方法 MyDate d2 = d1; /对象引用赋值 System.out.println(“d1:”+d1.toString()+“d2:”+d2.toString()+ ” d1=d2?”+(d1=d2); d2.year=2008; /修改实例成员变量值 System.out.println(“d1:”+d1+“d2:”+d2+” d1=d2?”+ (d1=d2)+”,d1.equals(d2)?”+(d1.equals(d2); /将对象转换为字符串

7、,默认调用 d1.toString(); d2=new MyDate(); /创建另一个实例 d2.set(d1); System.out.println(“d1:”+d1+“d2:”+d2+” d1=d2?”+ (d1=d2)+”,d1.equals(d2)?”+(d1.equals(d2); ,3.1.2 对象,4. 对象的引用模型,3.1.2 对象,Java程序设计实用教程(第3版),5. 对象的关系运算与比较相等,3.1.2 对象,Java程序设计实用教程(第3版),3.2 类的封装性,3.2.1 构造方法3.2.2 this引用和instanceof对象运算符3.2.3 访问控制 3

8、.2.4 静态成员3.2.5 析构方法3.2.6 浅拷贝与深拷贝,Java程序设计实用教程(第3版),3.2 类的封装性,封装(encapsulation)的含义是:类的设计者把类设计成一个黑匣子,使用者只能看见类中定义的公共方法,而看不见方法的实现细节,也不能直接对类中的数据进行操作。封装的目的有:隐藏类的实现细节;迫使用户通过接口去访问数据;增强代码的可维护性。 封装的措施有:构造方法、析构方法、方法重载、设置访问控制权限。,Java程序设计实用教程(第3版),3.2.1 构造方法,声明及调用构造方法public class MyDate int year,month,day; publi

9、c MyDate(int y, int m, int d) /声明构造方法 /构造方法与类同名,构造方法返回该类的一个实例 year = y; month = m; day = d; MyDate d = new MyDate(2009,7,18); /对MyDate d = new MyDate( ); /错,Java程序设计实用教程(第3版),3.2.1 构造方法,2. 默认构造方法 public MyDate() /没有声明任何构造方法时系统提供使用默认构造方法实例化对象时进行初始化约定:整数0、浮点数0.0、字符u0000、布尔false、引用数据类型nullpublic class

10、MyDate int year,month,day; public MyDate( ) /声明构造方法 /构造方法与类同名,构造方法返回该类的一个实例 year = 1970; month = 1; day = 1; ,Java程序设计实用教程(第3版),3.拷贝构造方法,ublic MyDate(MyDate d) year = d.year; month = d.month; day = d.day;调用语句如下: MyDate d1 = new MyDate(2009,7,16); MyDate d2 = new MyDate(d1); 第2句功能相当于以下两句:MyDate d2 =

11、new MyDate(); d2.set(d1);,3.2.1 构造方法,Java程序设计实用教程(第3版),4. 构造方法重载,public MyDate(int y, int m, int d)public MyDate(int y, int m)public MyDate(int y)public MyDate()public MyDate(MyDate d),3.2.1 构造方法,Java程序设计实用教程(第3版),3.2.2 this引用和instanceof对象运算符,this引用指代对象本身this访问本类的成员变量和成员方法this.成员变量this.成员方法(参数列表)调用本

12、类重载的构造方法this(参数列表)instanceof对象运算符MyDate d=new MyDate(); d instanceof MyDate,3.2.3 访问控制,类的访问权限:只有public和缺省两种 。 public class MyDate class MyDate_ex类中成员的访问权限声明set()和get()方法存取对象的属性,Java程序设计实用教程(第3版),3.2.4 静态成员,ublic class MyDate private int year,month,day; /实例成员变量 private static int thisYear; /静态成员变量 st

13、atic /静态成员变量初始化 thisYear=2009; public static int getThisYear() /静态成员方法 return thisYear; /访问静态成员变量 ,Java程序设计实用教程(第3版),静态成员变量的初始化:static /静态初始化块 静态成员变量的初始化;【例3.2】封装的日期类。,图3.3 实例成员变量与静态成员变量的存储结构不同,3.2.4 静态成员,Java程序设计实用教程(第3版),3.2.5 析构方法,ublic void finalize() /析构方法 语句序列;作用是:释放实例,并执行特定的操作。如:a. finalize()

14、 ;,Java程序设计实用教程(第3版),3.2.6 浅拷贝与深拷贝,1. 浅拷贝,public class Person String name; Mydate birthday; public Person(String name,Mydate birthday) this.name=name; this.birthday=birthday; public Person(Person p) this(p.name, p.birthday); ,3.2.6 浅拷贝与深拷贝,2. 深拷贝 有如下的类定义:,Person p1=new Person(“李小明”,new Mydate(1979,3

15、,15);Person p2=new Person(p1);,3.2.6 浅拷贝与深拷贝,2. 深拷贝 有如下的调用构造方法:,public class Person String name; Mydate birthday; public Person(String name,Mydate birthday) this.name=name this.birthday=birthday; public Person(Person p) this(p.name, p.birthday); ,3.2.6 浅拷贝与深拷贝,2. 深拷贝,new MyDate(p.birthday),String是常量

16、字符串类,当改变一个对象时自动创建新的,Java程序设计实用教程(第3版),3.2.6 浅拷贝与深拷贝,2. 深拷贝,【例3.3】 使用对象作为成员变量并实现 深拷贝的Person类。,Java程序设计实用教程(第3版),3.3 类的继承性,继承是一种由已有类创建新类的机制。3.3.1 由继承派生类3.3.2 继承原则及作用 3.3.3 子类的构造方法,Java程序设计实用教程(第3版),3.3.1 由继承派生类,修饰符 class 类 extends 父类 implements 接口列表例如:public class Student extends Person String special

17、ity; /专业【例3.4】 Student类继承Person类。,Java程序设计实用教程(第3版),3.3.1 由继承派生类,ublic class Student extends Person String speciality; /专业 public static void main(String args) Person p1=new Person(“李小明”,new Mydate(1979,3,15); Student s1=new Student(); s1.howMany(); System.out.println(“p1:”+p1+“,s1:”+s1); s1.set(“王江

18、”,Mydate(1987,9,1); System.out.println(s1+“,”+p1.getname()+“比”+ s1.getname()+”大”+p1.olderThen(s1)+”岁”); s1.finalize(); Person.howMany(); ,Java程序设计实用教程(第3版),3.3.2 继承原则及作用,继承原则子类继承父类的成员变量子类继承父类除构造方法以外的成员方法子类不能继承父类的构造方法子类可以增加成员,可以重定义从父类继承来的成员,但不能删除它们。,2. 继承的作用,3.3.2 继承原则及作用,Java程序设计实用教程(第3版),3. Object类

19、,ublic class Object public Object() /构造方法 public String toString() /描述对象 public boolean equals(Object obj)/比较对象相等 protected void finalize() throws ThrowableJava中的类都是Object的子类public class Person extends Object,3.3.2 继承原则及作用,Java程序设计实用教程(第3版),4. 子类对父类成员的访问权限,子类不能访问父类的私有成员(private)。子类能够访问父类的公有成员(public

20、)和保护成员(protected)。子类对父类的缺省权限成员的访问控制,以包为界分两种情况,可以访问当前包中成员。,3.3.2 继承原则及作用,Java程序设计实用教程(第3版),3.3.3 子类的构造方法,使用super()调用父类构造方法super(参数列表)public Student(String name, MyDate birthday, String spec) super(name, birthday); /调用父类同参数的构造方法 this.speciality = spec;默认执行super()public Student() /Java提供的默认构造方法 super()

21、; /调用父类构造方法Person(),Java程序设计实用教程(第3版),3.4 类的多态性,3.4.1 子类重定义从父类继承来的成员3.4.2 类型的多态3.4.3 编译时多态和运行时多态3.4.4 多态的方法实现,Java程序设计实用教程(第3版),3.4.1 子类重定义从父类继承来的成员,多态(polymorphism)意为一个名字可具有多种语义。如: +1 1+2 “1”+ “2”多态性是面向对象的核心特征之一。主要有方法多态和类型的多态。,Java程序设计实用教程(第3版),3.4.1 子类重定义从父类继承来的成员,子类隐藏父类成员变量子类覆盖父类成员方法 覆盖(override)

22、是指子类声明并实现父类中 的同名方法并且参数列表也完全相同。子类继承并重载父类成员方法重载(overload)是指同一个类中的多个方法可以同名但参数列表必须不同。【例3.5】 Student类重定义从父类继承来的成员。,this.countsuper.count,p1.toString();s2.toString();s1.finalize();,s2.set(“张晓丽”,new Mydate(1982,4,3);s2.set(“胡东东”,new Mydate(1982,4,3), “电子信息工程”);,Java程序设计实用教程(第3版),4. super引用,调用父类的构造方法 super(

23、参数列表)引用父类同名成员子类隐藏父类成员变量super.成员变量子类覆盖父类成员方法super.成员方法(参数列表),3.4.1 子类重定义从父类继承来的成员,Java程序设计实用教程(第3版),3.4.2 类型的多态,子类对象即是父类对象new Student() instanceof Person /truenew Person() instanceof Student /false 父类对象引用子类实例Person p=new Student(); Object obj = new Person(); public int olderThen(Person p)p1.olderThen

24、(s1)s1.olderThen(p1),Person类方法,Java程序设计实用教程(第3版),3.4.3 编译时多态和运行时多态,编译时多态性方法重载都是编译时多态。 Person p1 = new Person(李小明, new MyDate(1979,3,15);p1.toString() /执行Person类的toString()Student s1= new Student(p1,计算机); s1.toString() /执行Student类的toString(),2. 运行时多态性,Person p2 = new Student(张小莉, new MyDate(1989,1,5)

25、; /父类对象引用子类实例p2.toString() /执行Student类的toString(),父类对象不能执行子类增加的成员方法。如:,2.setSpeciality(“电子信息”);,Java程序设计实用教程(第3版),3.4.4 多态的方法实现,多态的toString()方法Object类声明:public String toString() /返回当前对象的信息字符串 return getClass().getName() + + Integer.toHexString(hashCode();,Java程序设计实用教程(第3版),2. 多态的equals()方法,Object类声明

26、:public boolean equals(Object obj) return this = obj; /引用比较,3.4.4 多态的方法实现,Java程序设计实用教程(第3版),Person类声明: public boolean equals(Object obj) if(this=obj) return true; if(obj!=null ,3.4.4 多态的方法实现,此处覆盖Object类的方法,Java程序设计实用教程(第3版),【例3.6】在对象数组中查找。,对象数组及计数运行时多态性体现 System.out.println(tablei.toString();indexOf

27、(Object table,Object obj)Oldest(Person table) /getAge()年龄,Java程序设计实用教程(第3版),3.5 类的抽象性,3.5.1 用继承刻画包含关系3.5.2 抽象类3.5.3 最终类,Java程序设计实用教程(第3版),3.5.1 用继承刻画包含关系,Java程序设计实用教程(第3版),3.5.2 抽象类,声明抽象类与抽象方法public abstract class ClosedFigure /闭合图形抽象类 public abstract double area(); /计算面积,抽象方法,以分号;结束,Java程序设计实用教程(第3

28、版),3.5.2 抽象类,抽象类的特点构造方法、静态成员方法不能被声明为抽象方法。一个非抽象类必须实现从父类继承来的所有抽象方法。(若不能实现就定义为抽象类)不能创建抽象类的实例。例如:ClosedFigure g = new ClosedFigure(); /语法错抽象类与抽象方法的作用 抽象类用于描述抽象概念;抽象方法在多个子类中表现出多态性,提供了方法声明与方法实现的分离机制,使抽象类的多个子类能够表现出共同的行为能力。,【例3.7】 闭合图形抽象类及其子类,例3.7 闭合图形抽象类及其子类,Java程序设计实用教程(第3版),3.5.3 最终类,声明最终类public final cl

29、ass Math extends Object /最终类(数学),不能被继承声明最终方法public class Circle1 extends Graphics1 public final double area() /最终方法,不能被子类覆盖 return Math.PI*this.radius*this.radius; 最终类包含的都是最终方法,非最终类也可以包含最终方法。,Java程序设计实用教程(第3版),作业和实验3、4,作业:p102习题3 P102:2、3、5、6、9题 P102:10、12、13、16、19题 P103:20、21、23、24、25题 P103:26、27、28、29、31题 P104:34、35、36、37、38题实验3: 1、P105(1) 2、P105 (4) 3、P105 (5)实验4: 1、P105(8) 2、P105 (11) 3、P105 (12),Java程序设计实用教程(第3版),实验3 类的封装、继承和多态,目的:类的封装、继承、多态和抽象性。 要求:掌握类的封装措施,理解对象的引用模型;掌握类的继承原则,使用重载和覆盖等多态设计可复用方法,理解运行时多态;理解抽象类和最终类的作用。掌握JDK创建自定义包、声明导入包的方法。重点:类的封装、继承原则,重载和覆盖等多态,运行时多态性。难点:运行时多态性。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号