书签 分享 收藏 举报 版权申诉 / 47
上传文档赚钱

类型09第9章-继承和多态课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4740824
  • 上传时间:2023-01-06
  • 格式:PPT
  • 页数:47
  • 大小:290.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《09第9章-继承和多态课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    09 继承 课件
    资源描述:

    1、第9章 继承和多态第第 II篇篇 的必备基础的必备基础 第6章 对象和类 第7章 字符串 第8章 继承和多态 第5章 数组 第9章抽象类和接口 第10章 面向对象建模-第11章图形界面程序编程 第12章 事件驱动程序-第15章 异常和断言 第16章 简单输入输出 第9章后可涉及图形界面 学习目标F利用继承性由父类创建子类(9.2).F使用super关键字调用父类的构造方法和方法(9.3).F在子类中覆盖方法(9.4).F熟悉Object类中的几个有用的方法(equals(Object),hashCode(),toString(),finalize(),clone(),and getClass(

    2、)(9.5,9.11 Optional).9.2 父类和子类Circle-radius+getRadius+setRadius+findAreaCylinder-length+getLength+setLength+findVolumeSubclassSuperclassUML 图CircleCircle MethodsCircle Data父类继承CylinderCircle MethodsCylinder MethodsCircle DataCylinder Data子类/Cylinder.java:Cylinder类的定义描述类的定义描述public class Cylinder ext

    3、ends Circle private double length=1;/*Return length*/public double getLength()return length;/*Set length*/public void setLength(double length)this.length=length;/*计算体积计算体积*/public double findVolume()return findArea()*length;Circle-radius+getRadius+setRadius+findAreaCylinder-length+getLength+setLengt

    4、h+findVolumeSubclassSuperclasssupertypesubtypeCylinder 是是由由 Circle派生而来Cylinder cylinder=new Cylinder();System.out.println(The length is +cylinder.getLength();System.out.println(The radius is +cylinder.getRadius();System.out.println(The volume of the cylinder is +cylinder.findVolume();System.out.prin

    5、tln(The area of the circle is +cylinder.findArea();The length is 1.0The radius is 1.0The volume of the cylinder is 3.14159The area of the circle is 3.14159 输出结果是:9.3使用关键字 super 调用父类的构造方法 调用父类的方法关键字super指向使用它的类的父类,可以用于2种途径:注意注意:调用父类的构造方法必须使用super,并且这个调用必须放在 构造方法的第一行。在子类中使用父类的构造方法的名字会引起语法错误。注意构造方法用来构造

    6、类的实例。与属性和方法不同,父类的构造方法不直接传给子类,它们只能从子类的构造方法中用关键字super调用。9.3.2 构造方法链构造方法可以调用重载的构造方法或父类的构造方法。构造方法可以调用重载的构造方法或父类的构造方法。如果他们没有被显示的调用,编译器将把如果他们没有被显示的调用,编译器将把super()当作构造方法当作构造方法的第一条语句。的第一条语句。public Cylinder()等价于 public Cylinder()super();public A(double d)/some statements 等价于 public A(double d)super();/some s

    7、tatements 9.3.2 构造方法链在任何情况下,构造一个类的实例,将会沿着继承链调用所有父类的构造方法,这叫构造方法链构造方法链。举例:p244追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee()this(2

    8、)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);1.从 main 方法开始追踪执行过程public class Faculty extends Employee publ

    9、ic static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employee(Stri

    10、ng s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);2.调用 Faculty 构造方法追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoke

    11、d);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);3.调用

    12、Employee的无参构造方法追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(

    13、3)Employees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);4.调用 Employee(String)构造方法追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();pub

    14、lic Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Pe

    15、rson()System.out.println(1)Persons no-arg constructor is invoked);5.调用 Person()构造方法追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee(

    16、)this(2)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);6.执行 println追踪执行过程public class Faculty extends Employe

    17、e public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employe

    18、e(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);7.执行 println追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invok

    19、ed);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(3)Employees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);9.执行

    20、 println追踪执行过程public class Faculty extends Employee public static void main(String args)new Faculty();public Faculty()System.out.println(4)Facultys no-arg constructor is invoked);class Employee extends Person public Employee()this(2)Invoke Employees overloaded constructor);System.out.println(3)Emplo

    21、yees no-arg constructor is invoked);public Employee(String s)System.out.println(s);class Person public Person()System.out.println(1)Persons no-arg constructor is invoked);9.执行 println没有无参构造方法的示例public class Apple extends Fruit class Fruit public Fruit(String name)System.out.println(Fruits constructo

    22、r is invoked);找出错误:如果一个类要扩展,最好提供一个无参构造方法以避免编程错误!声明一个子类子类可以扩展父类的方法和属性,所以可以在子类中:F添加新的属性F添加新的方法F重写父类的方法9.4 方法覆盖子类从父类中继承方法。有时,子类必须修改父类中定义的方法,这叫方法覆盖。/Cylinder.java:cylinder 类中覆盖 findArea()public class Cylinder extends Circle public double findArea()return 2*super.findArea()+2*getRadius()*Math.PI*length;/

    23、Other methods are omitted注意子类定义的方法必须与父类方法具有相同的头标志和相同的返回类型。实例方法仅当可访问时才能被覆盖。私有方法不能在定义它的类外访问,所以不能被覆盖。如果子类中定义的方法在父类中是私有的,那个这2个方法完全没有关系。静态方法也可以继承,但不能被覆盖。如果静态方法被重新定义,则父类的方法将被隐藏。对象类 ObjectJava中的每一个类都源于 java.lang.Object class.如果没有指定一个类继承谁,它的父类就是Object.public class Circle .Equivalent public class Circle exte

    24、nds Object .equals()和 hashCode()Methodsequals()方法检查2个对象是否.equals()和=比较 hashCode()返回该对象的哈希码,返回对象在计算机内部存储的十六进制内存地址.toString()方法toString()方法返回一个代表该对象的字符串:类名+哈希码.Cylinder myCylinder=new Cylinder(5.0,2.0);System.out.println(myCylinder.toString();显示结果类似:Cylinder15037e5.通常情况下要重写toString()方法。学习目标F理解多态、动态绑定和

    25、一般程序设计(9.6).F描述转换并理解显示向下转换的必要性(9.7).F理解隐藏数据域和静态方法的作用(9.9 Optional).F使用修饰符protected限制对数据和方法的访问(9.9).F使用修饰符final声明常量、不可修改的方法和不可扩展的类 (9.10).class GraduateStudent extends Student class Student extends Person public String toString()return Student;class Person extends Object public String toString()retur

    26、n Person;多态性、动态绑定和一般程序设计多态性、动态绑定和一般程序设计public class Test public static void main(String args)m(new GraduateStudent();m(new Student();m(new Person();m(new Object();public static void m(Object x)System.out.println(x.toString();方法m()采用Object型参数,所以可以用任何对象。同名的不同方法可以在程序中共存,称为多态,以覆盖和重载2种形式体现。GraduateStuden

    27、t,Student,Person,and Object 每个类都有自己的toString()方法,采用哪一种实现有JVM在运行时动态决定,这种能力成为动态绑定。动态绑定的工作机制多态性、动态绑定和一般程序设计最一般的类最特殊的类 如果对象o调用一个方法p,Java虚拟机依次在类C1、C2,Cn-1,Cn中查找方法p的实现,直到找到为止。一旦找到一个实现,停止查找并调用这个第一次找到的实现。一般程序设计多态性一般允许方法使用范围更广的对象参数,这称为一般程序设计。如果一个方法的参数类型是父类,可以向该方法传递这个参数子类的任何对象。public static void m(Object x)Sy

    28、stem.out.println(x.toString();9.7 对象类型转换语句 m(new Student();将对象 new Student()传递给了 Object 类型参数.该语句等价于:Object o=new Student();/Implicit casting m(o);隐式类型转换为什要转换假设:Student b=o;因为Student对象的总是Object对象的实例,但是Object对象的实例不一定是Student对象的实例。使用显示类型转换:Student b=(Student)o;/Explicit casting错误?错误?父类和子类之间的转换将一个子类的实例转

    29、换为一个父类的变量总是可行的,称为向上转换;将一个父类的实例转换为一个子类的变量称为向下转换;向下转换不一定总能成功。?Cylinder myCylinder=(Cylinder)myCircle;Apple x=(Apple)fruit;Orange x=(Orange)fruit;instanceof 运算符为确保转换的对象是子类的一个实例,使用instanceof 运算符:Circle myCircle=new Circle();if(myCircle instanceof Cylinder)Cylinder myCylinder=(Cylinder)myCircle;.Example

    30、9.1演示多态和对象转换演示多态和对象转换 创建2个对象,一个圆和一个圆柱,并调用displayObject方法显示它们。9.9隐藏数据可以覆盖一个实例方法,但是不能覆盖一个数据域(实例或静态的)或静态方法。如果在子类中声明的数据域或静态方法与父类中的名字相同,父类中的将被隐藏,但是它依旧存在。在子类中可以使用super关键字调用隐藏的数据域或静态方法。protected 数据和方法protected 修饰符可以应用于类中的数据和方法。公用类中保护的数据或方法可以被它的子类或同一包中的任何类访问,即使子类在不同的包中也可以。private,default,protected,public pr

    31、ivate,none(如果没有使用修饰符),protected,public 可见性逐渐增加 访问性汇总 Modifier on members in a class Accessed from the same class Accessed from the same package Accessed from a subclass Accessed from a different package public protected-default-private-可见性修饰符 public class C1 public int x;protected int y;int z;privat

    32、e int u;protected void m()public class C2 C1 o=new C1();can access o.x;can access o.y;can access o.z;cannot access o.u;can invoke o.m();public class C3 extends C1 can access x;can access y;can access z;cannot access u;can invoke m();package p1;public class C4 extends C1 can access x;can access y;can

    33、not access z;cannot access u;can invoke m();package p2;public class C5 C1 o=new C1();can access o.x;cannot access o.y;cannot access o.z;cannot access o.u;cannot invoke o.m();注一个子类可以覆盖父类的protected方法并把它的可见性改为public。但是子类不能降低父类中定义的方法的可访问性。final 修饰符final 类不能被继承:final class Math .final 变量是常量:final static

    34、double PI=3.14159;final 方法不能被重写.finalize,clone,和 getClass Methodsfinalize 方法会被该对象的垃圾回收程序调用.clone()方法创建一个有单独内存空间的新对象,返回类型是object.int targetArray=(int)sourceArray.clone()getClass()描述类的信息,称为元对象。Optional初始化块初始化模块是一个用大括号括住的语句块,它位于类的声明中,但是不在构造方法或方法内。public class Book private static int numOfObjects;privat

    35、e String title;private int id;public Book(String title)numOfObjects+;this.title=title;public Book(int id)numOfObjects+;this.id=id;public class Book private static int numOfObjects;private String title private int id;public Book(String title)this.title=title;public Book(int id)this.id=id;numOfObjects

    36、+;Equivalent 实例初始化块public class Book numOfObjects+;静态初始化块class A extends B static System.out.println(As static initialization block +is invoked);class B static System.out.println(Bs static initialization block +“is invoked);类的执行顺序(P261)第一次使用类时,装入类1.装入父类2.初始化静态数据域,顺序执行类的静态初始化模块。调用类的构造方法1.调用父类的构造方法2.初始化实例数据3.执行构造方法的方法体作业P269 9.1,9.3

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:09第9章-继承和多态课件.ppt
    链接地址:https://www.163wenku.com/p-4740824.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库