Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承

上传人:E**** 文档编号:89395843 上传时间:2019-05-24 格式:PPT 页数:46 大小:549KB
返回 下载 相关 举报
Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承_第1页
第1页 / 共46页
Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承_第2页
第2页 / 共46页
Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承_第3页
第3页 / 共46页
Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承_第4页
第4页 / 共46页
Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承》由会员分享,可在线阅读,更多相关《Java程序设计 教学课件 ppt 作者 韦鹏程 石熙 肖丽 单元4 类的继承(46页珍藏版)》请在金锄头文库上搜索。

1、JAVA 程序设计,单元四 类的继承,学习目标: 掌握Java的继承机制 掌握方法重写技术 理解面向对象编程的多态的意义 掌握与继承相关的关键字 了解抽象类与抽象方法的使用,目 录,任务三 用程序描述不同的学生,拓展任务,任务一 用程序描员工与经理,一、任务描述 在单元三中,我们已经学习了如何用类来描述一个事物,首先应该考虑这个类“有什么”和“做什么”,即“属性”与“行为”。本任务中,将同时出现两个事物,员工和经理。显然,经理也是员工的一种,也具有姓名、性别等属性和输出信息和自我介绍的方法。但经理应该具备自己独特的属性,如职位,同时能输出包括职位在内的自我介绍信息。使用类的继承机制描述这两个类

2、。,二、任务实施 1.设计员工类以及经理类 员工类应该有的属性为员工的姓名、性别、年龄和工资,其中工资通过2000+(年龄-20)/5*300计算得到。员工类的成员方法为输出员工信息以及输出员工自我介绍的文本。经理类大致与员工类相似,属性增加职位项目,其工资的计算公式为3000+(年龄-20)/5*300,而自我介绍的文本也需要介绍自己的职位。 建立员工类Emploee与经理类Admin,并且设计类ETest测试这两个类。程序保存为“ETest.java”。,2.使用继承机制 (1)使用继承创建类 经过单元三的学习,创建员工类与经理类并不复杂。但分析程序4.1很容易发现类Employee与类A

3、dmin存在大量的相同的代码。事实上,经理类与员工类相比,原本就存在大量重复的属性(如姓名、性别和年龄)和行为(信息输出)。使用面向对象的继承机制,让经理类Admin继承至员工类,这能使程序更加简洁。 程序4.2 ETest2:,(2)使用protected关键字 注意变量salary,在程序4.1的Employee类中,使用private修饰;而程序4.2中使用protected修饰。private修饰的成员不能被继承,只能被自身成员访问;而protected修饰的成员可供自身及其子类成员访问。 可以说访问权限protected正是为继承机制而设计的。,(3)子类构造方法 子类的构造方法中,

4、使用 super(name, gender, age); 调用了父类的构造方法。super关键字与this关键字正好相对,用来指代自身的父类。以上代表就等同于Employee类中的Employee(name, gender, age)。使用super调用父类的构造方法可以间接的访问父类的私有变量。正是通过这种途径,Admin类的对象才能具备父类私有的name、gender和age属性。,子类构造方法的一般形式如下: 子类类名(参数列表) super(与父类构造方法参数相对应的参数); 子类特有成员的初始化; 特别注意的是,子类构造方法中无论有没有使用super(),都必定调用父类的构造方法。若

5、有super()语句,则必为构造方法的第一个语句。若不适用super()语句,系统则会调用父类的无参数的构造方法。,【例4.1】若程序4.2中子类构造方法不使用super(),程序是否正确。 Admin类的构造方法若不使用super(),则应改为 public Admin(String name,char gender,int age,String position) this.name=name; this.gender=gender; this.age=age; this.position=position; salary=3000+(age-20)/5*300; 显然,此构造方法有多个错

6、误。,3.重写方法 (1)重写 在本任务中,经理的自我介绍比起普通员工多了一句职务的介绍。在程序4.2中,实现的方式是在经理类Admin的声明中,在继承selfIntro()方法的基础上,增加了一个adminIntro()的方法。因此在main()方法中,对象ep3需要调用两个方法。 ep3.selfIntro(); ep3.adminIntro();,使用方法重写,能提供更简洁的解决。 class Admin extends Employee private String position; public Admin(String name,char gender,int age,Strin

7、g position) super(name,gender,age); this.position=position; salary+=1000; public void selfIntro()/重写父类的方法 System.out.println(“我是一名员工“); System.out.println(“我是还一名管理人员“); ,(2)super的另一种用途 当子类重写了父类的方法,这仅仅是将父类的这个方法隐藏起来了,它仍然存在,通过super关键字仍然可以调用。 例如,经理类Admin中的selfIntro()方法,就可以修改为: public void selfIntro() su

8、per.selfIntro();/调用父类被覆盖的方法 System.out.println(“我是还一名管理人员“); 显然,super具备this完全相同的功能。,三、相关知识 1.继承与is-a关系 2.重写 (1)方法重写 (2)变量重写 (3)被覆盖成员的调用,四、任务小结 本任务使用继承机制创建了两个关联的类员工和经理。比较继承机制使用前后的程序,代码数量的减少时最直观的优点。此外,继承还使得类的抽象描述更符合客观规律。在任务中,首次使用了重写技术,从名字上,很容易与重载混淆。通过后续任务,能够更彻底的区别这两种灵活的机制。,任务二 计算空间中两点之间的距离,一、任务描述 在单元三

9、任务二中,我们建立了点类Point,实现了平面上两点间距离的计算。本任务要求将平面上的两点扩展到空间中的两点,通过对Point类的继承,建立空间中的点类,并计算空间中两点之间的距离。,二、任务实施 1.继承点类 空间中的点,坐标为(x,y,z)。与平面上的点相比,其属性有所增加,即z轴的坐标。空间中两点的距离如图4.3所示。,其距离的计算公式也扩展为:,(1)实现继承 Point类保持不变,创建其子类Point3D类,保存为“Point3D.java”。,(2)重写还是重载 观察dis方法,在父类中,已经定义了dis方法为 public double dis(Point p) 其参数为Poin

10、t类型,返回double型的值。然而在子类中,重新定义dis如下 public double dis(Point3D p) 两个dis方法虽然同名,却拥有不同的参数类型,这就是方法重载,而并非重写。Point3D类在继承Point类时,已经继承了dis(Point p)方法,加上重新的定义的dis(Point3D p)方法,子类拥有两个同名但参数不同的dis()方法,这正是方法重载。通过不同的参数类型,能够分别调用这两个方法。,(3)super是否仍然有效 观察两个dis()方法的主体。父类中,两点x轴的坐标之差由x-p.x实现;而子类中,同样的功能则必须调用get方法getX()-p.get

11、X()。x是父类Point的私有变量,因而在父类中可以直接引用;但在子类中,这个访问就需要通过getX()方法来实现,私有变量不能被其子类成员访问。 同理,对于Z轴坐标的计算,子类Point3D就能够使用z-p.z实现。变量z正是子类的私有变量。 对于子类的getX()-p.getX()语句,能够改为super.x-p.getX(),即使用super.x来访问父类的私有变量。编译证明,这样的引用是非法的。私有变量同样不能通过super关键字调用。,2.测试空间点类 编写主类及main()方法,测试空间点类的效果。程序保存为“Point3Dtest.java”。,程序4.5 Point3DTes

12、t: public class Point3DTest public static void main(String args) Point3D p1=new Point3D(); Point3D p2=new Point3D(10,20,30); System.out.println(“空间中两点的距离为“+p1.dis(p2); ,3.计算XY平面上投影的距离 (1)直接计算 完成了空间中两点间距离的计算,我们将再度扩展程序的功能,要求进一步实现两点在XY平面上投影点间距离的计算。如图4.5所示。,对于类Point3D,必须增加设置变量z的方法 public void setZ(int z

13、) this.z=z; ,(2)子类对象赋值给父类对象 更好的解决方案则需要利用方法的重载。显然,Point3D类具备两个dis方法,一个计算XY平面上的距离,一个计算空间中的距离。只需使用一个Point类型的参数,去调用需要的方法即可,而类的声明不需要做任何的修改。 修改后的程序保存为“Point3Dtest2.java”。,程序4.6 Point3Dtest2: public class Point3Dtest2 public static void main(String args) Point3D p1=new Point3D(); Point3D p2=new Point3D(10,

14、20,30); Point p3=p2;/将子类对象赋值给父类对象 System.out.println(“空间中两点的距离为“+p1.dis(p2); /*利用参数重载方法*/ System.out.println(“空间中两点投射在xy平面上的距离为“+p1.dis(p3); ,三、相关知识 1.区别重载和重写 重载(Overload)是指允许多个同名但形式参数个数或类型不同的方法存在于同一个类里面,调用时通过参数的类型,个数或者顺序来区分。而重写(Override),是指子类对父类允许访问的方法的方法体的重新编写,但需要保持返回值和参数的不变。 子类中的重载尤其需要区分。,【例4.4】子

15、类中的重写与重载。,以下子类重写了父类的方法: class Father int test() return 0; class Son extends Father int test() return 1; ,以下子类继承了父类的方法,并新增了一个参数类型不同的重载的方法: class Father int test() return 0; class Son extends Father int test(int i) return i; ,2.父类引用子类对象 子类继承自父类,子类“is a”父类,事实上,子类通常是一个比父类更加特殊更加具体的类。也就是说,子类是父类的一种。因此,父类可以

16、自由的因用子类的对象,也就是说,子类对象可以赋值给父类。 【例4.5】程序动物类及其子类猫和狗。,四、任务小结 本任务通过继承原有的Point类,创建了空间中的点类Point3D。在子类中,使用了方法重载,并通过重载方法使得Point3D类同时具有了计算空间中的距离和XY平面上的距离两种功能。任务中,子类与父类进行了相互的引用,这也是面向对象的Java灵活性的体现,理解起来也许并不容易。,任务三 用程序描述不同的学生,一、任务描述 在单元三任务一中,用程序描述了学生类Student。本任务要求使用继承,在类Student的基础之上,建立大学生类CollegeStu以及研究生类Graduate。大学生类与学生类相比,应增加专业属性和对专业的自我介绍;而研究生类在此基础之上还应其研究生身份的自我介绍。,二、任务实施 1.建立大学生与研究生类 在前面的任务中,我们已经使用了继承机制来优

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

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

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