java 第五次实验:类的多态性 (二)构造方法的重载

一、实验目的

理解类的多态性,掌握方法的继承、重载和覆盖,掌握如何从键盘输入数据以及多重循环的使用。

二、实验要求

1.   编写体现类的多态性(成员方法重载)的程序。

2.   编写构造方法重载的程序。

3.   编写使用键盘来输入数据的程序。

4.   编写使用多重循环的程序。

三、实验内容

(一)类的多态性练习

1.   理解类的多态性

类的继承发生在多个类之间,而类的多态只发生在同一个类上。在一个类中,可以定义多个同名的方法,只要确定它们的参数个数和类型不同。这种现象称为类的多态。

多态使程序简洁,为程序员带来很大便利。在OOP 中,当程序要实现多个相近的功能时,就给相应的方法起一个共同的名字,用不同的参数代表不同的功能。这样,在使用方法时不论传递什么参数,只要能被程序识别就可以得到确定的结果。

类的多态性体现在方法的重载(overload)上,包括成员方法和构造方法的重载。

2.   方法的重载

方法的重载是指对同名方法的不同使用方式。

1)      程序功能:对不同的数进行排序输出。在IntSort 类中定义2 个同名的方法sort。

2)      编写KY5_1.java 文件,源代码如下。

[java]  view plain  copy
  1. public class KY5_1 {  
  2.     public static void main(String args[])  {   
  3.         int a=30, b=12, c=40;  
  4.         IntSort s=new IntSort();  
  5.         System.out.println("两个数的排序结果:"+s.sort(a,b));  
  6.         System.out.println("三个数的排序结果:"+s.sort(a,b,c));  
  7.     }  
  8. }  
  9. class IntSort {  
  10.     public String sort (int a, int b) {   
  11.         if (a>b)  
  12.             return a+" "+b;  
  13.         else  
  14.             return b+" "+a;  
  15.     }  
  16.     public String sort (int a, int b, int c) {     
  17.         int swap;  
  18.         if (a<b) {  
  19.             swap=a;  
  20.             a=b;  
  21.             b=swap;  
  22.         }  
  23.         if (a<c) {  
  24.             swap=a;  
  25.             a=c;  
  26.             c=swap;  
  27.         }   
  28.         if (b<c) {  
  29.             swap=b;   
  30.             b=c;  
  31.             c=swap;  
  32.         }  
  33.         return a+" "+b+" "+c;  
  34.     }  
  35. }  

3)      编译KY5_1.java并运行程序

4)      将程序的输出结果记录在实验报告中。

            程序KY5_1的输出结果:

            两个数的排序结果:30 12

            三个数的排序结果:40 30 12

5)      请在实验报告中说明在IntSort 类中出现的下面两个同名的方法各自的功能?

        I.    public String sort (int a, intb) 

        II.   public String sort (int a, intb, int c)

答:两个同名方法具有不同的参数个数说明运用了方法重载功能,第一个方法是两个参数a、b两个数的降序排序而第二个方法是三个参数a、b、c三个数的降序排序。

6) 请在实验报告中指出程序中是哪条语句调用了方法I,哪条语句调用了方法II?

    答:System.out.println("两个数的排序结果:"+s.sort(a,b));语句调用了方法I

           System.out.println("三个数的排序结果:"+s.sort(a,b,c));调用了方法II。

(二)构造方法的重载

         构造方法的名称和类同名,没有返回类型。尽管构造方法看起来和一般的成员方法没有差别,但它不是方法,也不是类的成员。因此,构造方法不能直接调用,只能由new 操作符调用。

        构造方法对于类是十分重要的,对象的初始化任务要靠构造方法来完成。重载构造方法的目的是提供多种初始化对象的能力,使程序员可以根据实际需要选用合适的构造方法来初始化对象。

1)      编写程序KY5_2.java,将其中的类RunDemo的构造方法进行重载。源代码如下。

[java]  view plain  copy
  1. public class KY5_2 {  
  2.     public static void main(String[] args) {  
  3.         RunDemo r1=new RunDemo("刘新宇");  
  4.         r1.check();  
  5.         RunDemo r2=new RunDemo(null"654321");  
  6.         r2.check();  
  7.         RunDemo r3=new RunDemo("张驰","123456");  
  8.         r3.check();  
  9.     }  
  10. }  
  11.   
  12. class RunDemo {  
  13.     private String userName, password;  
  14.     RunDemo(String name) {  
  15.         userName=name;  
  16.     }  
  17.     RunDemo(String name, String pwd) {  
  18.         this(name);  
  19.         password=pwd;  
  20.     }  
  21.     void check() {   //检验用户名和密码  
  22.         String s=null;  
  23.         if (userName!=null)  
  24.             s="用户名:"+userName;  
  25.         else  
  26.             s="用户名不能为空!";  
  27.         if (password!="123456")  
  28.             s=s+" 口令无效!";  
  29.         else  
  30.             s=s+" 口令:******";  
  31.         System.out.println(s);  
  32.     }  
  33. }  

2)      编译程序KY5_2.java并运行程序

3)      将程序的输出结果记录在实验报告中。

            程序的输出结果:

            用户名:刘新宇口令无效!

            用户名不能为空!口令无效!

            用户名:张驰口令:******

4)      指出程序中的下面三条语句分别调用了类RunDemo中的哪个构造方法?

        I.        new RunDemo("刘新宇");                       调用RunDemo(String name)方法

        II.      new RunDemo(null,"654321");               调用RunDemo(String name, Stringpwd)方法

        III.    new RunDemo("张驰","12345678");        调用RunDemo(String name, String pwd)方法

5)      类RunDemo中有两个构造方法,其中第一个构造方法RunDemo(String) 只有一个参数,用来对成员变量userName 赋初值。第二个构造方法RunDemo(String, String) 有两个参数,并有更多的内容,首先调用this(name),其实际作用就是调用当前类的构造方法RunDemo(String name);然后对成员变量password 赋值;最后调用check 方法来检查userName 和password,类似于一般程序的口令验证。重载构造方法的执行由对象根据实际参数的个数、类型和顺序确定。

(三)使用键盘输入

1.    程序功能:运行程序后,从键盘输入数字 1、2或者3 ,可显示抽奖得到的奖品;如果输入其它数字或字符则显示“对不起,没有奖品给你!”。

2.    程序源代码如下。

[java]  view plain  copy
  1. import java.io.*;  
  2.   
  3. class KY5_3 {  
  4.           public static void main(String args[]) throws IOException {   
  5.             char ch;   
  6.             System.out.println("抽奖游戏,祝您好运!");   
  7.             System.out.println("按 1、2、3 数字键后回车,可得大奖!");   
  8.             System.out.println("按空格键后回车,可退出本游戏.");   
  9.             while ((ch=(char)System.in.read())!=' ')  
  10.             {  
  11.                System.in.skip(2);     // 跳过回车键   
  12.                switch (ch) {  
  13.                case '1':  
  14.                  System.out.println("恭喜您得大奖,一辆汽车!");  
  15.                  break;  
  16.                case '2':  
  17.                  System.out.println("不错呀,您得到一台笔记本电脑!");  
  18.                  break;  
  19.                case '3':  
  20.                  System.out.println("没有白来,您得到一台冰箱!");  
  21.                  break;  
  22.                default:  
  23.                  System.out.println("对不起,没有奖品给您!欢迎下次光临。");  
  24.              }  
  25.           }  
  26.         }  
  27.        }  

3.编译并运行KY5_3.java

4.运行程序,从键盘输入一下数字或字符,看看程序的输出结果是什么?把这些结果写在实验报告中。

答:输出结果:

抽奖游戏,祝您好运!

 12数字键后回车,可得大奖!

按空格键后回车,可退出本游戏.

1

恭喜您得大奖,一辆汽车!

2

不错呀,您得到一台笔记本电脑!

3

没有白来,您得到一台冰箱!

4

对不起,没有奖品给您!欢迎下次光临。

(四) 使用多重循环语句

1.请编写程序 KY5_4.java,要求程序能够输出九九乘法表。

2.程序源代码如下。

[java]  view plain  copy
  1. public class KY5_4   
  2.      {   
  3.        public static void main(String args[])   
  4.        {   
  5.           int i, j, n=9;   
  6.           System.out.print("      *   |");   
  7.           for (i=1; i<=n; i++)  { System.out.print("    "+i);  }   //第一个for循环  
  8.           System.out.print("\n----------|");   
  9.           for (i=1; i<=n; i++)  { System.out.print("-----");  }     //第二个for循环   
  10.           System.out.println();   
  11.           for (i=1; i<=n; i++)                               //第三个for循环  
  12.           {   
  13.               System.out.print("     "+i+"    |");   
  14.               for (j=1; j<=i; j++)  { System.out.print("   "+i*j);  }   //第四个for循环   
  15.               System.out.println();   
  16.           }   
  17.        }   
  18.  }  

3.编译并运行KY5_4.java     

4.请将程序的运行结果写在实验报告中,并且说明程序中每一个for循环的作用。

答:运行结果:

      *  |    1    2   3    4    5   6    7    8   9

----------|---------------------------------------------

    1    |   1

     2   |   2   4

     3   |   3   6   9

     4   |   4   8  12   16

     5   |   5   10  15   20   25

     6   |   6   12  18   24   30  36

     7   |   7   14  21   28   35  42   49

     8   |   8   16  24   32   40  48   56   64

     9   |   9   18  27   36   45  54   63   72  81

第一个for循环执行System.out.print("    "+i);输出最上方右侧的列号序列;

第二个for循环执行System.out.print("-----");输出----------|-------------

第三个for循环执行System.out.print("     "+i+"    |");

              for (j=1; j<=i; j++)  { System.out.print("   "+i*j);  }   //第四个for循环

              System.out.println();输出左侧的行号序列且进行第四个for循环;

第四个for循环执行System.out.print("   "+i*j);输出i*j的值;




猜你喜欢

转载自blog.csdn.net/qq_40956679/article/details/80762856
今日推荐