类的多态性理解

一、实验目的:

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

二、实验环境:

     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)          ab两个数排序

II. public String sort (int a, int b, int c)      abc三个数排序

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

调用方法ISystem.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程序功能:运行程序后,从键盘输入数字 12或者3 ,可显示抽奖得到的奖品;如果输入其它数字或字符则显示“对不起,没有奖品给你!”。

2程序源代码如下。

      import java.io.*;

      class KY5_3 {

          public static void main(String args[]) throws IOException {

            char ch;

            System.out.println("抽奖游戏,祝您好运!");

            System.out.println("123 数字键后回车,可得大奖!");

            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循环:

  

       

四、实验总结

多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性

 


某公司的员工有经理Manager、技术人员Technicist和营销人员SalsePerson,他们的薪金计算方法如下: 经理按月计酬,方法是:基本工资+奖金;技术人员按月计酬,方法是:基本工资;营销人员按月计酬,方法是:基本工资+销售利润*5%。 每人员都有职工编号、姓名、性别、入职时间、职位、基本工资等数据,其为入职时间定义Date,并为该重载运算符<<,实现入职时间的输入;各人员使用统一接口getpay()计算各人员的月薪。其次,设计一个统计并输出该公司每个人员某几个月薪金情况的报表Report,该提供add接口向Report的容器添加员工信息,并提供print接口用于输出每个员工的职工编号、姓名、性别、入职时间、职位和在设定的月份时间段该员工的薪酬总额。为了方便实现查找功能,为Report重载[]运算符的功能,下标值为职位,能根据职位信息查找出所有符合该职位的员工,并重载print接口,输出查找出的员工信息,信息包括职工编号、姓名、性别、入职时间、职位、基本工资。在主函数对实现的进行测试,首先,创建各人员对象,通过Report的add接口向报表添加这些人员信息,然后通过Report的print接口输出报表。其次测试报表的查找功能,输入要查找的员工职位信息,通过Report的print接口输出查找到的员工基本信息报表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值