Java面向对象程序设计 教学课件 ppt 作者 梁燕来 程裕强 第4章 继承与多态

上传人:E**** 文档编号:89368368 上传时间:2019-05-24 格式:PPT 页数:92 大小:628.50KB
返回 下载 相关 举报
Java面向对象程序设计 教学课件 ppt 作者  梁燕来 程裕强 第4章 继承与多态_第1页
第1页 / 共92页
Java面向对象程序设计 教学课件 ppt 作者  梁燕来 程裕强 第4章 继承与多态_第2页
第2页 / 共92页
Java面向对象程序设计 教学课件 ppt 作者  梁燕来 程裕强 第4章 继承与多态_第3页
第3页 / 共92页
Java面向对象程序设计 教学课件 ppt 作者  梁燕来 程裕强 第4章 继承与多态_第4页
第4页 / 共92页
Java面向对象程序设计 教学课件 ppt 作者  梁燕来 程裕强 第4章 继承与多态_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《Java面向对象程序设计 教学课件 ppt 作者 梁燕来 程裕强 第4章 继承与多态》由会员分享,可在线阅读,更多相关《Java面向对象程序设计 教学课件 ppt 作者 梁燕来 程裕强 第4章 继承与多态(92页珍藏版)》请在金锄头文库上搜索。

1、第4章继承与多态,主讲人:程裕强,本章学习目标,理解继承机制 掌握Java类的继承定义 掌握子类对象的构造过程 掌握不同权限符的继承性 掌握成员覆盖,重点是方法重写 掌握final用法 理解多态概念,掌握两种方法多态 掌握抽象类的定义与使用 掌握接口的定义与实现,理解接口与抽象类的异同 掌握抽象类与接口相关的方法多态 掌握Object类 阅读三个改进的数据结构类 了解匿名类,4.1 引例,在第3章我们运用面向对象的思想定义了5个版本的Person类,成功得将Person的属性和操作封装起来。 实际上,Person类具有许多属性和方法,比如人具有身份证号、性别、民族等属性,代码如下。 假设现在需

2、要定义一个学生类型,除了具有人的属性外,还具有学号、专业、班级等属性,Student类代码如下。,public class Person /人的属性 public String pid; /身份证号 public String name; /姓名 public boolean sex; /性别 public int age; /年龄 public int nation; /民族 public String address; /地址 /构造器 public Person() public Person(基本参数. public Person(全部参数). /人的一个行为动作 public voi

3、d speak() /说话. ,public class Student /人一般属性 public String name; /姓名 public boolean sex; /性别 public int age; /年龄 public String pid; /身份证号 public int nation; /民族 public String address; /地址 / 学生特有的属性 public String sid; /学号 public String major; /专业 public String school; /学校 public String classname; /班级

4、/构造器 public Student() public Student(基本参数). public Student(全部参数) . /人的一般方法 public void speak()/说话. /学生特有操作 public void study() /学习. ,从上面的代码很容易发现,Student类与Person类代码重复过多。 再假设现在需要定义“研究生”类,那么属性定义要分为“人的属性”、“学生的属性”和“研究生”专有属性。重复的代码会更多。 学生是一类特殊的人,具备人的基本属性和功能,所以Student类应该是一个特殊的Person类。 每当出现一个新概念时,我们只能从零开始创建这

5、个类吗?是否可以在现有类的基础上创建新的类呢,如何才能更好的实现代码复用?这些问题摆在我们面前,如何解决呢?,4.2 继承机制,在现实世界许多新生事物并不是凭空产生的,往往是建立在原有事物基础上的。比如我们今天使用的汉字就是继承甲骨文发展而来的,无线电话是建立在有线电话基础上的,相对论继承发展了经典力学等等。继承发展是自然界(包括人类社会)的一大自然规律,新的发展不是对前者的否定,而是继承与发展,这与唯物辩证法是一致的。 Java是面向对象的语言,具有继承机制。继承是根据现有类创建新的类的机制,由继承而得到的新类称为子类或派生类,被继承的类称为父类或者基类。子类可以从父类继承属性和方法。 Ja

6、va是单继承,也就是只有一个父类,所以关键字extends是第三人称单数。如一个类的定义没有使用extends,系统默认该类继承Object类。也就是Java中所有的类都是Object类的子类。,类继承格式如下 修饰符 class 子类名 extends 父类名 类成员; 运用Java继承机制来改进引例中的Student类,public class Student2 extends Person / 学生的属性 public String sid; / 学号 public String major; / 专业 public String school; / 学校 public String c

7、lassname; / 班级 / 构造器 public Student2() public Student2(基本参数) super(pid,name,sex,age,nation,address); public Student2(全部参数) this(pid, name, sex, age, nation, address); this.sid = sid; this.major = major; this.school = school; this.classname = classname; public void study() System.out.println(“我在攻读“ +

8、 major + “专业“); ,可以发现Student2类继承了Person的属性和方法,继承而来的属性和方法使用上和本类中属性方法使用一致。相对原来的Student类,Student2类的代码明显精炼,很好的体现了代码复用性。除了构造器,父类的public成员被子类继承。 例1:测试继承机制构造的类。 import primer.*; public class StudentTest public static void main(String args) Student2 s=new Student2(“1“,“张三“,true,22,3,“sh“, “002“,“jsj“,“fdu“,

9、“1班“); s.speak(); /继承来的方法 s.study(); /新定义的方法 ,可见类继承而来的属性和方法,在使用上同自己定义的属性和方法。,4.3 super,子类可以继承父类的成员,如果子类中声明的属性与父类属性同名,那么父类属性将被隐藏。如果子类中声明的方法与父类的方法同名,并且参数个数、类型和顺序也相同,那么子类的方法覆盖了父类的方法。 这时,如果想在子类中访问父类中被子类隐藏的成员时,就要使用super关键字。 访问隐藏的成员:super.属性名; super.方法名(); 在Java程序中,子类不会主动调用父类中带参构造器。在创建子类对象时需要在构造器中用super关键

10、字调用父类的构造器,以便能够对从父类继承过来的属性初始化。Java规定,必须将调用父类构造器的语句放在子类构造方法的第一条语句位置。 调用父类的构造器:super(参数);,Student2类第二个构造器就是通过super关键字调用父类Person的构造器,代码如下。 public Student2(String pid,String name, boolean sex, int age, int nation,String address) /调用父类有参构造器 super(pid,name,sex,age,nation,address); ,4.4 对象构造过程,在第3章中我们已经知道,n

11、ew关键字调用构造器为对象分配内存空间,构造器进行对象初始化工作。 子类生成对象时,情况要复杂一些。在执行子类的构造器时,首先要调用父类的构造器,完成父类对象初始化工作是子类对象初始化工作的一部分。 例2:测试子类对象构造过程。 编写测试程序Family,分别定义Father和Son二个类,Son继承Father,通过创建Son的一个对象来测试构造器执行顺序,代码如下。,class Father public Father() System.out.println(“father“); /Father的构造器 class Son extends Father public Son() Syst

12、em.out.println(“son“); /Son的构造器 public class Family public static void main(String args) Son son = new Son(); ,可见构造Son对象时,要先构造Father对象; 实验结论:当生成子类对象时, Java首先(隐式)调用父类的不带参数的构造器,生成父类的对象。接下来,继续执行子类的构造方法,生成子类的对象。,默认情况下子类构造器中通过super()隐式调用父类构造器,即是父类无参构造器,所以在定义类时,一般提供无参构造器。 如果一个类没有提供无参构造器,那么其子类构造对象时就无法自动生成对

13、象。 参见例3。,4.5 继承性规则,子类能享用父类那些成员存在严格限制,可以通过权限符来设置。 权限符除了常见的public和private,此外还有protected和默认权限。protected是保护权限符,专为继承设计;当类或类的成员无权限符时,这时权限符是系统默认缺省权限符。权限包括可访问权限和可继承权限。 public和默认修饰符可以修饰类,protected和private只能修饰成员。对于任意的类,可以继承或访问public类和public类的public成员;类的private成员只能被本类访问,其他类不能继承或访问该类的private成员。protected和默认权限要复杂

14、些。,例4:下面程序演示在相同的包中不同权限符的访问权限和继承权限。不失一般性,在当前工作目录ch4下创建a目录,作为a包的目录。然后定义Father、Son和Other三个类,同属于a包,源文件存放在a目录下。,Father类具有默认权限,同时拥有默认权限x成员和保护权限y成员 package a; class Father /默认权限类 int x; /默认权限成员 protected int y; /保护成员 public Father() public Father(int x,int y) this.x=x; this.y=y; ,Son继承Father类,且同属于a包,用于测试同包

15、继承权限 package a; public class Son extends Father /继承默认权限类 public Son() public Son(int x,int y) this.x=x; /this.x是继承A默认权限的成员x this.y=y; /this.y是继承A的保护成员y public void print() System.out.println(“x=“+x+“,y=“+y); ,在a中定义主类Other,用于测试同包中的访问权限 package a; public class Other public static void main(String args) /测试 /可以访问同包的友类 Father f=new Father(1,2); /可以访问同包中某类的默认成员 System.out.println(f.x); /可以访问同包中某类的保护成员 System.out.println(f.y); /同一包中,Son继承Father的默认成员和保护成员 Son s=new Son(1,2); s.print();/测试继承权限 ,命令“javac *.java”表示编译该目录下所有的Java源文件;Other类是带包名的主类,要到上一级目录执行带包名的主类。 得出结论:同包中,一个类

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

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

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