一、实验目的:
理解类的多态性,掌握方法的继承、重载和覆盖,掌握如何从键盘输入数据以及多重循环的使用。
二、实验环境:
Eclipse
三、实验内容:
(一) 类的多态性练习
1.方法的重载
方法的重载是指对同名方法的不同使用方式。
1) 程序功能:对不同的数进行排序输出。在IntSort 类中定义2 个同名的方法sort。
2) 编写KY5_1.java 文件,源代码如下。
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<c) {
swap=a;
a=c;
c=swap;
}
if (b<c) {
swap=b;
b=c;
c=swap;
}
return a+" "+b+" "+c;
}
}
public class KY5_1 {
public static void main(String args[])
{
int a=30, b=12, c=40;
IntSort s=new IntSort();
System.out.println("两个数的排序结果:"+s.sort(a,b));
System.out.println("三个数的排序结果:"+s.sort(a,b,c));
}
}
运行结果如下:
3) 请在实验报告中说明在IntSort 类中出现的下面两个同名的方法各自的功能?
I. public String sort (int a, int b) 将a,b两个数排序
II. public String sort (int a, int b, int c) 将a,b,c三个数排序
4) 请在实验报告中指出程序中是哪条语句调用了方法I,哪条语句调用了方法II?
调用方法I:System.out.println("两个数的排序结果:"+s.sort(a,b));
调用方法II: System.out.println("三个数的排序结果:"+s.sort(a,b,c));
(二)构造方法的重载
1) 编写程序KY5_2.java,将其中的类RunDemo的构造方法进行重载。源代码如下。
class RunDemo {
private String userName, password;
RunDemo(String name) {
userName=name;
}
RunDemo(String name, String pwd) {
this(name);
password=pwd;
}
void check() { //检验用户名和密码
String s=null;
if (userName!=null)
s="用户名:"+userName;
else
s="用户名不能为空!";
if (password!="123456")
s=s+" 口令无效!";
else
s=s+" 口令:******";
System.out.println(s);
}
}
public class KY5_2 {
public static void main(String[] args) {
RunDemo r1=new RunDemo("刘新宇");
r1.check();
RunDemo r2=new RunDemo(null, "654321");
r2.check();
RunDemo r3=new RunDemo("张驰","123456");
r3.check();
}
}
运行结果如下:
2) 指出程序中的下面三条语句分别调用了类RunDemo中的哪个构造方法?
I. new RunDemo("刘新宇"); RunDemo(String name)
II. new RunDemo(null, "654321"); RunDemo(String name,String pwd)
III. new RunDemo("张驰","123456"); RunDemo(String name,String pwd)
3) 类RunDemo中有两个构造方法,其中第一个构造方法RunDemo(String) 只有一个参数,用来对成员变量userName 赋初值。第二个构造方法RunDemo(String, String) 有两个参数,并有更多的内容,首先调用this(name),其实际作用就是调用当前类的构造方法RunDemo(String name);然后对成员变量password 赋值;最后调用check 方法来检查userName 和password,类似于一般程序的口令验证。重载构造方法的执行由对象根据实际参数的个数、类型和顺序确定。
(三)使用键盘输入
1)程序功能:运行程序后,从键盘输入数字 1、2或者3 ,可显示抽奖得到的奖品;如果输入其它数字或字符则显示“对不起,没有奖品给你!”。
2)程序源代码如下。
import java.io.*;
class KY5_3 {
public static void main(String args[]) throws IOException {
char ch;
System.out.println("抽奖游戏,祝您好运!");
System.out.println("按 1、2、3 数字键后回车,可得大奖!");
System.out.println("按空格键后回车,可退出本游戏.");
while ((ch=(char)System.in.read())!=' ')
{
System.in.skip(2); // 跳过回车键
switch (ch) {
case '1':
System.out.println("恭喜您得大奖,一辆汽车!");
break;
case '2':
System.out.println("不错呀,您得到一台笔记本电脑!");
break;
case '3':
System.out.println("没有白来,您得到一台冰箱!");
break;
default:
System.out.println("对不起,没有奖品给您!欢迎下次光临。");
}
}
}
}
运行结果如下:
(四) 使用多重循环语句
1)请编写程序 KY5_4.java,要求程序能够输出九九乘法表。
2)程序源代码如下。
public class KY5_4
{
public static void main(String args[])
{
int i, j, n=9;
System.out.print(" * |");
for (i=1; i<=n; i++) { System.out.print(" "+i); } //第一个for循环
System.out.print("\n----------|");
for (i=1; i<=n; i++) { System.out.print("-----"); } //第二个for循环
System.out.println();
for (i=1; i<=n; i++) //第三个for循环
{
System.out.print(" "+i+" |");
for (j=1; j<=i; j++) { System.out.print(" "+i*j); } //第四个for循环
System.out.println();
}
}
}
运行结果如下:
4.请将程序的运行结果写在实验报告中,并且说明程序中每一个for循环的作用。
第一个for循环:
第二个for循环:
第三个for循环:
第四个for循环:
四、实验总结
多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性