实验4继承、多态、抽象类、接口

上传人:j****9 文档编号:45640906 上传时间:2018-06-18 格式:DOC 页数:15 大小:132KB
返回 下载 相关 举报
实验4继承、多态、抽象类、接口_第1页
第1页 / 共15页
实验4继承、多态、抽象类、接口_第2页
第2页 / 共15页
实验4继承、多态、抽象类、接口_第3页
第3页 / 共15页
实验4继承、多态、抽象类、接口_第4页
第4页 / 共15页
实验4继承、多态、抽象类、接口_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《实验4继承、多态、抽象类、接口》由会员分享,可在线阅读,更多相关《实验4继承、多态、抽象类、接口(15页珍藏版)》请在金锄头文库上搜索。

1、实验实验 4 4 继承、多态、抽象类、接口继承、多态、抽象类、接口注意:有些程序由于注意:有些程序由于 WordWord 的关系,复制后,的关系,复制后,tabtab 缩位可能会变成其它符号。需要你去调整缩位可能会变成其它符号。需要你去调整一下,删除缩位,重新一下,删除缩位,重新 TabTab一、实验目的.1 二、实验要求.1 三、实验内容.2 1. 类的继承与覆盖练习.2 1.0 父类的哪些成员可以被继承?.2 1.1 父类 Student(学生)与子类 HiStudent(大学生).2 1.2 实例方法为什么需要覆盖.4 1.3 验证成员方法的覆盖方式.5 1.4 this、super 和

2、 super()的使用.6 1.5 变量、静态方法的隐藏。.9 1.6隐藏与覆盖的综合性实例.10 2. 类的多态性练习.11 2.1 普通方法的重载(实验 3,本实验略).11 2.2 构造方法的重载(实验 3,本实验略).11 2.3 运行时多态与动态绑定.11 3. 抽象类.13 4. 接口.14一、实验目的一、实验目的通过编程和上机实验理解Java语言的面向对象特性,了解类的继承性和多态性的作用,掌握它们的实现方法,了解数据域和静态方法的隐藏,了解抽象类和接口的作用。二、实验要求二、实验要求1、 编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;2、 编写体现类的多态性的程

3、序;3、 编写体现抽象类和接口功能的程序。三、实验内容三、实验内容1. 类的继承与覆盖练习类的继承与覆盖练习例如,圆是一种形状。圆类Circle是形状类Shape的子类。父类也叫基类、超类,子类也叫次类、扩展类、派生类。子类可从父类中产生,保留父类的成员变量和方法,并可根据需要对它们加以修改。新类还可添加新的变量和方法。这种现象就称为类的继承。当建立一个父类时,不必写出全部成员变量和成员方法。只要简单地声明这个类是从一个已定义的类继承下来的,就可以引用被继承类的全部成员。Java 提供了一个庞大的类库让开发人员继承和使用。设计这些类是出于公用的目的,因此,很少有某个类恰恰满足你的需要。你必须设

4、计自己的能处理实际问题的类,如果你设计的这个类仅仅实现了继承,和父类一样,那样没什么用。所以,通常要对父类进行扩展,即添加新的属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体的对象。继承的意义就在于此。1.0 父类的哪些成员可以被继承?父类的哪些成员可以被继承?可以访问的成员才能被继承可以访问的成员才能被继承。具体分2种情况:* 当父类和子类在同一个包时,子类可以继承父类中的public/protected/无修饰 级别的变量和方法;* 当父类和子类不在同一个包时,且父类是public的,那么子类可以继承父类的public/protected 级别的变量和方法。如果父类前没有p

5、ublic,那么子类无法访问父类,更谈不上继承的问题。1.1 父类父类 Student(学生)与子类(学生)与子类 HiStudent(大学生)(大学生)(1) Student.java程序源代码如下。public class Student /学生类protected String xm; /姓名protected int xh; /学号void setData(String m,int h) /设置姓名和学号xm =m;xh = h;public void print() /输出姓名和学号System.out.println(xm+“, “+xh); (2) HiStudent.java的

6、描述和代码如下程序功能:通过Student类产生子类HiStudent,其不仅具有父类的成员变量xm(姓名)、xh(学号),还定义了新成员变量xy(学院)、xi(系)。在程序中调用了父类的print方法,同时可以看出子类也具有该方法。程序源代码如下public class HiStudent extends Student /大学生类继承自学生类protected String xy;/所在学院或大学名称protected String xi;/所在系的名称public static void main(String args)Student s1 = new Student();s1.set

7、data(“李四“,12321) ;s1.print();HiStudent s2 = new HiStudent() ;s2.setdata(“张三“,12345); /调用父类的成员方法s2.xy=“XX大学“; /访问本类的成员变量s2.xi=“计算机系“; /访问本类的成员变量s2.print();/调用父类的方法,就象调用它自己的一样System.out.print(s2.xm+“, “+s2.xy+“, “+s2.xi); (3)编译并运行,结果如下图所示。1.2 实例方法为什么需要覆盖实例方法为什么需要覆盖上例中,s2.print();语句调用父类的方法,只能输出父类的数据(姓名

8、和学号)。如果想用函数输出姓名、学号、学院、系,需要在子类中另外添加一个函数。如果这个函数也叫print(),(嗯,这样好记),并且如果形参、返回类型都一样,并且其可见性修饰符和父类print()方法的一样甚至更开放,并且它们都不是静态的,并且它所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类,或者什么也不抛出,那么,我们可以说子类的print()方法覆盖(override)了父类的print()方法。子类中添加的print()可以这样写:public void print() /输出姓名、学号、学院、系System.out.println(xm+“, “+xh+“, “+xy+“

9、, “+xi);可见,子类的覆盖方法重写(修改)了父类的被覆盖方法。实现了不同的功能。当然,父类的被覆盖方法仍然存在,在子类中可以用super.print()来引用。嗯,如果参数不一样,那也叫重载。如果返回类型不一样,或者一个静态一个非静态,或者子类方法的开放性比父类被覆盖方法的更低,都会编译错。如果两个方法其它一样,又都是静态的,这没问题,叫做隐藏,而非覆盖。另外,父类中用final修饰的方法不能被覆盖。再重复一下方法覆盖的概念:如果在子类中定义一个方法,其名称、返回 类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配, 那么可以说,子类的方法覆盖了父类的方法。 覆盖的说明:

10、子类的方法名称返回类型及参数签名 必须与父类的一致子类方法不能缩小父类方法的访问权限子类方法不能抛出比父类方法更多的异常方法覆盖只存在于子类和父类之间,同一个类中只能重载父类的静态方法不能被子类覆盖为非静态方法子类可以定义于父类的静态方法同名的静态方法,以便在子类中隐藏父 类的静态方法(满足覆盖约束), Java 虚拟机把静态方法和所属的类绑定,而把实例方法和所属的实例绑 定。父类的非静态方法不能被子类覆盖为静态方法父类的私有方法不能被子类覆盖父类的抽象方法可以被子类通过两种途径覆盖(即实现和覆盖)父类的非抽象方法可以被覆盖为抽象方法1.3 验证成员方法的覆盖方式验证成员方法的覆盖方式方法覆盖

11、为子类提供了修改父类实例方法的能力。例如,Object类的toString方法返回的字符串是“类名随机码”这样的。子类可以修改层层继承下来的Object 根类的toString 方法,让它输出一些更有用的信息。下面的程序显示了在子类Circle 中添加toString 方法,用来返回圆半径和圆面积信息。(1) 编写Circle类,覆盖Object 类的toString方法,Circle类和Test类源代码如下。class Circle private int radius;Circle(int r) setRadius(r);public void setRadius(int r) radius=r;public in

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

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