西 西 安 安
邮 邮 电 大 学 (计算机学院)
课内实验报告 实验名称:
:
态 继承与多态 ﻩ ﻩ
专业名称:
计算机科学与技术 班 班
级:
计科 1405 班
学生姓名:
高宏伟
学 学
号:
指导教师:
刘霞林 实验日期:
2016 、10 0、 、13
一、实验目得
通过编程与上机实验理解 Java 语言得继承与多态特性,掌握变量得隐藏、方法得覆盖、重载,掌握抽象类与接口得使用。
二、实验要求
1、编写体现类得继承性(成员变量、成员方法、成员变量隐藏)得程序。
2、编写体现类得多态性(成员方法重载)得程序. 3、编写体现类得多态性(构造方法重载)得程序。
4、编写使用接口得程序。
三、实验内容
( ( 一) ) 类得继承
1、创建 公共类 Student、
(1)编写程序文件 Student、java,源代码如下:
pub li c class Student
{
p prot ect edString name;
//具有保护修饰符得成员变量
p rotected int number;
void setData(String m,int h)
//设置数据得方法
{
name =m;
number= h;
}
public void print()
//输出数据得方法
{
System、out、println(name+", "+number);
}
}
(2)编译 Student、java,产生类文件 Student、class.
2.创建继承得类 Undergraduate (1)程序功能:通过 Student 类产生子类 undergraduate,其不仅具有父类得成员变量
name(姓名)、number(学号),还定义了新成员变量 academy(学院)、department (系)。在程序中调用父类得 print 方法. (2)编写 Undergraduate 程序:
class Undergraduate extends Student
{
【代码 1】
//定义成员变量 academy
【代码 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+”, ”+u、number+", "+u、academy+”, "+u、department);
}
}
(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〈b) { swap=a; a=b; b=swap; } if (a
{ String s=""; int swap; for (int i=0; i〈arr、length; i++)
for (int j=0; j<arr、length-1; j++) if (arr[j]>arr[j+1])
{ s[j]; arr[j]=arr[j+1]; arr[j+1]=swap; } for (int i=0; i〈arr、length; i++)
s=s+arr[i]+""; return s; } } public class Sort extends Applet { IntSort s=new IntSort(); public void paint(Graphics g)
{ int a=30, b=12, c=40; 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 〈applet codebase=e:/java/程序 code=KY3_11、class width=420 height=380〉 ( ( 三)
构造方法得重载
(1)编写构造方法 User 得重载程序文件 RunDemo,源代码如下。
class User{ private String userName, password; 【代码 1】
//定义一个无参构造方法得头部 { System、out、println(”全部为空!”); } 【代码 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("张驰”,”12345678"); } }
(2)编译并运行程序 (四) ) 实现
Mous eL istener 与
MouseMoti o nL i stener 两个接口
(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】//画一条直线
}
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 文件,源代码如下. 〈applet codebase=e:/java/程序 code=Interface、class width=320 height=180〉
条线 四、运行结果
五、思考题
1. 使用变量之前就是不就是都要先声明变量。使用变量之前就是不就是都要先赋值,为什么? 使用之前必须先声明,因为声明了,运行时计算机才能划分计算机空间给她。根据变量不同,或者在堆里,或者在栈里.但就是没有声明得话,连存在得空间都没有,那么读写也就无从谈起。不就是必须先赋值,因为会自动赋默认值。
2. 什么就是构造方法。
构造方法就是一种特殊得方法,它就是一个与类同名且没有返回值类型得方法。对象得创建就就是通过构造方法来完成,其功能主要就是完成对象得初始化.当类实例化一个对象时会自动调用构造方法。构造方法与其她方法一样也可以重载。
3. 类得继承与多态有什么作用,在使用上应该注意什么问题。
继承就就是子类继承父类,使子类具有父类得各种属性与方法,好处就就是避免多余得代码出现,例如,项目中常常要用到得数据库得开启关闭,就可以单独写一个父类,其她类要用得话可以去继承。。。
多态就就是一个接口,使用不同得实例去执行不同得操作,好处就就是增强程序得可扩展性及可维护性,使代码更简洁 六、总结
方、藏隐得量变了握掌,性特态多与承继得言语 avaJ 了解理验实机上与程编次这过通ﻩ法得覆盖、重载,掌握抽象类与接口得使用。对于 Java 语言有了更深一层得认识,多态与继承、方法重写密切相关,我们在方法中接收父类类型作为参数,在方法实现中调用父类类型得各种方法。当把子类作为参数传递给这个方法时,java虚拟机会根据实际创建得对象类型,调用子类中相应得方法。