欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载
     

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

    • 资源ID:1359623       资源大小:458.50KB        全文页数:55页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    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 接口列表,类结构,Java程序设计实用教程(第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.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();或 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; 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) 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); /将对象转换为字符串,默认调用 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.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; public 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 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 = 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.成员方法(参数列表)调用本类重载的构造方法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; /静态成员变量 static /静态成员变量初始化 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() ;,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);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是常量字符串类,当改变一个对象时自动创建新的,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 speciality; /专业【例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(“王江”,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类,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)和保护成员(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(); /调用父类构造方法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)是指子类声明并实现父类中 的同名方法并且参数列表也完全相同。子类继承并重载父类成员方法重载(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(参数列表)引用父类同名成员子类隐藏父类成员变量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(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); /父类对象引用子类实例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类声明: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(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版),3.5.2 抽象类,抽象类的特点构造方法、静态成员方法不能被声明为抽象方法。一个非抽象类必须实现从父类继承来的所有抽象方法。(若不能实现就定义为抽象类)不能创建抽象类的实例。例如:ClosedFigure g = new ClosedFigure(); /语法错抽象类与抽象方法的作用 抽象类用于描述抽象概念;抽象方法在多个子类中表现出多态性,提供了方法声明与方法实现的分离机制,使抽象类的多个子类能够表现出共同的行为能力。,【例3.7】 闭合图形抽象类及其子类,例3.7 闭合图形抽象类及其子类,Java程序设计实用教程(第3版),3.5.3 最终类,声明最终类public final class 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创建自定义包、声明导入包的方法。重点:类的封装、继承原则,重载和覆盖等多态,运行时多态性。难点:运行时多态性。,

    注意事项

    本文(类的封装、继承和多态ppt课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开