西 安 邮 电 大 学
(计算机学院)
课内实验报告
实验名称: 继承与多态
专业名称: 计算机科学与技术 班 级: 计科1405班 学生姓名: 高宏伟
学 号: 04141152 指导教师: 刘霞林 实验日期: 2016.10.13
精选文库
一、实验目的
通过编程和上机实验理解 Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。
二、实验要求
1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 2.编写体现类的多态性(成员方法重载)的程序。 3.编写体现类的多态性(构造方法重载)的程序。 4.编写使用接口的程序。
三、实验内容
(一)类的继承
1.创建公共类Student.
(1)编写程序文件 Student.java,源代码如下:
public class Student {
protectedString name; //具有保护修饰符的成员变量 protected int number;
void setData(String m,int h) //设置数据的方法 { name =m; number= h; }
public void print() //输出数据的方法 {
System.out.println(name+\ } }
(2)编译 Student.java,产生类文件Student.class。
2.创建继承的类Undergraduate
1)程序功能:通过 Student 类产生子类 undergraduate,其不仅具有父类的成员变量 name(姓名)、number(学号),还定义了新成员变量academy(学院)、department print 方法。
(2)编写 Undergraduate 程序:
class Undergraduate extends Student
{
【代码1】 //定义成员变量academy
— 2
( (系)。在程序中调用父类的精选文库
【代码2】 //定义成员变量department public static void main(String args[]) {
【代码3】 //创建一个学生对象s
【代码4】 //用父类的setData方法初始化对象s 【代码5】 //对象s调用print方法 【代码6】 //创建一个大学生对象u
【代码7】//调用父类的成员方法setData初始化对象u 【代码8】 //设置对象u的成员变量academy 【代码9】 //设置对象u的成员变量department
System.out.print(u.name+\ } }
(3)编译并运行程序
注意:公共类 Student 与undergraduate 类要在同一文件夹(路径)内。
(二)方法的重载
(1)程序功能:对不同的数进行排序输出。在IntSort 类中定义3 个同名的方法sort。 (2)编写Sort.java 文件,源代码如下。
import java.awt.Graphics; import java.applet.Applet; class IntSort {
public String sort(int a, int b) { if (a>b) return a+\"\"+b; else
return b+\"\"+a; }
public String sort(int a, int b, int c) { int swap; if (a— 3
c=swap; }
return a+\"\"+b+\"\"+c; }
public String sort(int arr[]) { String s=\"\"; int swap;
for (int i=0; i for (int i=0; i int arr[]={34,8,12,67,44,98,52,23,16,16}; g.drawString(\"两个数的排序结果:\"+s.sort(a,b),30,30); g.drawString(\"三个数的排序结果:\"+s.sort(a,b,c),30,60); g.drawString(\"数组的排序结果:\"+s.sort(arr),30,90); } } (3)编译并运行程序 (4)编写Sort类文件的页面文件sort.html (三) 构造方法的重载 (1)编写构造方法User 的重载程序文件RunDemo,源代码如下。 class User{ private String userName, password; 【代码1】 //定义一个无参构造方法的头部 { System.out.println(\"全部为空!\"); } — 精选文库 4 精选文库 【代码2】 //定义一个构造方法,参数为name,用name初始化成员变量userName 【代码3】 //定义一个构造方法的头部,参数为name和pwd { 【代码4】 // 调用上个构造方法初始化userName 【代码5】 //初始化成员变量password check(); } void check() { String s=null; if (userName!=null) s=\"用户名:\"+userName; else s=\"用户名不能为空!\"; if (password!=\"12345678\") s=s+\" 口令无效!\"; else s=s+\" 口令:********\"; System.out.println(s); } } public class RunDemo { public static void main(String[] args) { new User(); new User(\"刘新宇\"); new User(null,\"邵丽萍\"); new User(\"张驰\} } (2)编译并运行程序 (四)实现 MouseListener 和 MouseMotionListener 两个接口 (1)编写实现接口的程序文件 Interface.java,源代码如下。 import java.applet.Applet; import java.awt.*; import java.awt.event.*; 【代码1】 //定义一个实现接口MouseListener, MouseMotionListener 并继承Applet的一个类的头部,类名为Interface { int x1, y1, x2, y2; public void init() { addMouseListener(this); addMouseMotionListener(this); } public void paint(Graphics g) { 【代码2】//画一条直线 — 5 精选文库 } public void mousePressed(MouseEvent e) { // 记录起点坐标 x1=e.getX(); y1=e.getY(); } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void mouseMoved(MouseEvent e) {} public void mouseDragged(MouseEvent e) { // 记录终点坐标 x2=e.getX(); y2=e.getY(); repaint(); } } 编译 Interface.java 文件。 编写 Interface.html 文件,源代码如下。 (5)在浏览器中打开 Interface.html 文件,在窗口中拖动鼠标可以随意画出一条线 四、运行结果 — 6 — 精选文库 7 精选文库 五、思考题 1. 使用变量之前是不是都要先声明变量。使用变量之前是不是都要先赋值,为什么? 使用之前必须先声明,因为声明了,运行时计算机才能划分计算机空间给他。根据变量不同,或者在堆里,或者在栈里。但是没有声明的话,连存在的空间都没有,那么读写也就无从谈起。不是必须先赋值,因为会自动赋默认值。 2. 什么是构造方法。 构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。 3. 类的继承和多态有什么作用,在使用上应该注意什么问题。 继承就是子类继承父类,使子类具有父类的各种属性和方法,好处就是避免多余的代码出现,例如,项目中常常要用到的数据库的开启关闭,就可以单独写一个父类,其他类要用的话可以去继承。。。 多态就是一个接口,使用不同的实例去执行不同的操作,好处就是增强程序的可扩展性及可维护性,使代码更简洁 六、总结 通过这次编程和上机实验理解了 Java 语言的继承和多态特性,掌握了变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。对于Java语言有了更深一层的认识,多态与继承、方法重写密切相关,我们在方法中接收父类类型作为参数,在方法实现中调用父类类型的各种方法。当把子类作为参数传递给这个方法时,java虚拟机会根据实际创建的对象类型,调用子类中相应的方法。 — 8 因篇幅问题不能全部显示,请点此查看更多更全内容