Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5

上传人:E**** 文档编号:89389222 上传时间:2019-05-24 格式:PPT 页数:33 大小:154.50KB
返回 下载 相关 举报
Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5_第1页
第1页 / 共33页
Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5_第2页
第2页 / 共33页
Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5_第3页
第3页 / 共33页
Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5_第4页
第4页 / 共33页
Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5》由会员分享,可在线阅读,更多相关《Java 程序设计 教学课件 ppt 作者 杨厚群 主编 chap5(33页珍藏版)》请在金锄头文库上搜索。

1、抽象性、封装性、继承性和多态性称为面向对象的四大特性。通过前面的学习,对前两个特性有了一定程度的理解,本章将继续探讨后两个特性,即继承性和多态性。,第5章 继承与多态,类的继承; 类成员的隐藏与重载; 多态性; Object类和 Class类; 抽象类与接口; 对象克隆; 对象转型和类的设计原则,本章要点,Java中的继承分类的继承和接口的继承两种,类的继承只支持单继承;而接口的继承可以是多重继承。,5.1 类的继承,Modifiers class SubClassName extends SuperClassName /ClassBody ,子类的定义子类也是类。 它的定义形式与一般类的定义

2、形式极其相似,其格式为:,其中,Modifiers是修饰符,可以使用的修饰符与前一章中所介绍的一样;SubClassName是子类的名称;extends是用于实现继承的关键字,当类的定义中有extends关键字时,表示当前定义的类继承于别的类,是别的类的子类;SuperClassName是父类名;ClassBody是子类的类体。,5.1 类的继承子类的定义,class Point /点类 protected int x,y; /点坐标 public Point() /无参构造方法 public Point(int xx,int yy)setPoint(xx,yy); public void s

3、etPoint(int m,int n)x=m;y=n; /设置标位置 public int getX()return x; public int getY()return y; class Circle extends Point /定义圆类 private double radius; /radius为圆的半径 public Circle(int x,int y,double r)this.x=x;this.y=y;setRadius(r); public void setRadius(double r)radius=r; /设置圆的半径 public double getRadius()

4、return radius; /获取圆的半径 public double getArea()return 3.1415*radius*radius; /获取圆的面积,5.1 类的继承子类的定义示例,继承于点 类的圆类,public String toString() return“Position(“+x+“,“+y+“)Radius=“+radius; public class CircleTest public static void main(String args) Circle c=new Circle(50,50,10); System.out.println(c.toString

5、(); c.setPoint(100,100); c.setRadius(20); System.out.println(c.toString(); ,5.1 类的继承子类的定义示例,例中,定义了三个类Point、Circle和CircleTest。Circle继承于Point类,Point类是父类,Circle是子类。,在子类的定义示例有这样一条语句:,5.1 类的继承子类的构造方法,public Point() /无参构造方法,Java中,在执行子类的构造方法时,必须先执行父类的构造方法,它的第一条语句必须是调用父类的构造方法的语句。调用父类的构造方法是通过语句super()来完成的。如果

6、要调用父类的有参构造方法,则在super()的圆括号中加入所需的参数。 当在子类的构造方法中通过super()来调用父类的构造方法时,如果不带参数,则这样的显式调用可以省略,它调用父类的构造方法是由系统自动进行的。但是,此时,如果父类中没有显式定义无参的构造方法,则编译出错。,通过类的继承,子类继承了父类的成员,同时在子类中还可以添加一些新成员。但是,当在子类中添加的成员与父类中的成员同名时,系统如何处理这样的冲突呢?本节主要探讨这个问题。,5.2 类成员的隐藏与重载,通过继承,子类继承了父类中除构造方法以外的所有成员,这些成员称为子类的继承成员。继承成员不仅包括在超类中定义的公有(publi

7、c)、受保护(protected)及私有成员(private),还包括超类的继承成员。但是在子类中,只能直接引用父类中用public或protected修饰的成员,父类中用private修饰的成员在子类中不可直接引用,因为它们受访问属性的控制。 使用子类的程序能访问子类的公有继承成员,但不能访问子类的受保护和私有的继承成员。子类的内部能访问它自己定义的所有成员,在程序中,只能访问子类自己定义的公有成员,而不能访问子类自己定义的受保护和私有成员。,5.2 类成员的隐藏与重载类成员的继承,当在子类中添加的新成员变量与父类中的成员变量同名时,父类中对应的成员变量将被隐藏起来。在子类中,如果直接引用了

8、这些同名的变量,则引用的是子类中定义的同名变量。当在子类中要引用父类中的同名变量时,可以通过super关键字来进行。super关键字用于指向当前类的父类。请读者结合前面所学的知识,自行区别this,super和super()三者的不同。,5.2 类成员的隐藏与重载成员变量的隐藏,class SuperClass protected int x,y; SuperClass() SuperClass(int x,int y)this.x=x;this.y=y; String superToString()return “In SuperClass:x=“+x+“ y=“+y; class SubC

9、lass extends SuperClass protected int x,y; SubClass() SubClass(int x,int y)super(x-1,y-1);this.x=x;this.y=y; String subToString()return “In SubClass:x=“+x+“ y=“+y; String superToStringInSub() return “In SuperClass Called by super in SubClass:super.x=“+super.x+“ super.y=“+super.y; ,5.2 类成员的隐藏与重载成员变量的

10、隐藏示例,成员变量的隐藏 及super的用法,In SuperClass:x=5 y=5 In SubClass:x=10 y=10 In SuperClass Called by super in SubClass:super.x=9 super.y=9,5.2 类成员的隐藏与重载成员变量的隐藏示例,public class Example5_2 public static void main(String args) SuperClass sup=new SuperClass(5,5); SubClass sub=new SubClass(10,10); System.out.printl

11、n(sup.superToString(); System.out.println(sub.subToString(); System.out.println(sub.superToStringInSub(); ,编译运行得到如下结果:,子类可以继承父类中的成员方法,同时也可以在子类中定 义一些新的成员方法,这些新添加的成员方法有如下三种 情况: 在子类中所添加的成员方法是全新的成员方法,它与父类中的成员方法不存在同名冲突问题。 在子类中,定义了与父类同名的成员方法,但其参数不一样,这种情况称为成员方法的重载 在子类中定义了与父类中同名同参的成员方法,这种情况被称为成员方法的覆盖。若要引用父类

12、中的同名方法,也可以通过关键字super来完成。这是子类对父类所作的一种修改。,5.2 类成员的隐藏与重载成员方法的重载与覆盖,构造方法不能被覆盖,它们的名称总是与当前类相同。构 造方法是新创建的,而不是继承而来的,子类不能直接通 过方法名调用父类的一个构造方法,而是通过关键字super 调用父类的一个构造方法。 调用超类中的常规方法,常采用如下格式:,5.2 类成员的隐藏与重载构造方法的覆盖,super(arg1,arg2,.),super语句必须是构造函数定义中的第一条语句。如下面的 程序是一个名为SubPoint的类,它是从java.awt包中的Point 类中派生而来的。SubPoin

13、t类的定义了一个用于初始化x,y 和名称的构造函数。,import java.awt.Point; class SubPoint extends Point String name; SubPoint(int x,int y,String name) super(x,y); this.name=name; public static void main(String arguments) SubPoint p=new SubPoint(8,9,”subPoint”); System.out.printIn(“x is “+ p.x); System.out.printIn(“y is “+ p

14、.y); System.out.printIn(“name is“ + p.name); ,5.2 类成员的隐藏与重载构造方法的覆盖示例,成员变量的隐藏具有 覆盖构造方法的坐标点 类Point 及super的用法,多态性表示同一种事物的多种形态;不同的对象对相同的消息可有不同的解释,这就形成多态性。,5.3 多态性,多态性具有更广泛的定义:如果操作方法及它们的操作对象多于一个,则称为具有多态性。Gardelli和Wegner将各种多态性严格的分为四类: 1.参数多态性 2.包含多态性 3.重载多态性 4.强制多态性,5.3 多态性,Java的标准系统包提供了很多类,其中,在java.lang包

15、中所提供的的Object类和Class类经常用到,在本节对它们作一简单说明。,5.4 Object类和 Class类,Object类是Java的所有类的根,如果一个类在定义时不继承 于任何类,则它也有一个默认的父类,那就是Object类。 Object具有很多用途,它为程序设计带来了极大的方便,它 至少在以下三个方面发挥了极大的作用: Object类型的变量可以用来引用任何类型的对象,这在多态性的实现中经常用到。 将成员方法的参数设置成Object类类型的变量时,可接收任何类型的对象传来的参数。 Object提供了很多公有的或保护的成员方法,这些成员方法是所有类都可能会用到的成员方法,在子类中

16、能直接引用。,5.4 Object类和 Class类 Object类,Class类是一个公有的(public)最终类(final),它直接继 承于Object类。Class类常用于描述正在运行的类或接口等。 Class类没有公有的构造方法,Class的实例可通过类的对象调 用getClass()方法来得到。此时,Class类的实例化其实是由 Java虚拟机(JVM)来自动完成的。下面的方法用于打印一 个对象的类名信息:,5.4 Object类和 Class类 Class类,void printClassName(Object obj) System.out.println(“The class of “ + obj + “ is “ + obj.getClass().get

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号