第五次实验:类的多态性

2023-12-30 07:32
文章标签 实验 多态性 第五次

本文主要是介绍第五次实验:类的多态性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、实验目的

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

二、实验要求

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

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

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

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

三、实验内容

(一)类的多态性练习

1.   理解类的多态性

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

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

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

2.   方法的重载

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

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)      编译KY5_1.java并运行程序

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

答:

两个数的排序结果:30 12

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

 

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

I.        public String sort (int a, intb)

答:实现两个数从大到小的排序

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

答:实现三个数从大到小的排序

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

答:方法I:s.sort(a,b)

       方法II:s.sort(a,b,c)

(二)构造方法的重载

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

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

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)      编译程序KY5_2.java并运行程序

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

答:

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

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

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

 

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

I.        new RunDemo("刘新宇");à RunDemo(String name)

II.      new RunDemo(null,"654321"); à RunDemo(Stringname, String pwd)

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.       程序源代码如下。

      import java.io.*;

      class KY5_3 {

          public static voidmain(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("对不起,没有奖品给您!欢迎下次光临。");

             }

          } 

        }

       }

3.编译并运行KY5_3.java

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

答:

抽奖游戏,祝您好运!

按 1、2、3 数字键后回车,可得大奖!

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

1

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

2

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

3

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

 

(四) 使用多重循环语句

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

2.程序源代码如下。

public class KY5_4

    {

      public static void main(Stringargs[])

      {

         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();

         }

      }

 }

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循环:输出了 *   |    1   2    3    4   5    6    7   8    9

第二个for循环:输出了----------|---------------------------------------------

第三个for循环:输出左边的一列1到9的列

第四个for循环:输出九九数乘法表的各个结果,即:

1

2   4

3   6   9

4   8  12   16

5   10  15   20   25

6   12  18   24   30  36

7   14  21   28   35  42   49

8   16  24   32   40  48   56   64

9   18  27   36   45  54   63   72  81

 

这篇关于第五次实验:类的多态性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/552125

相关文章

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

C++(多态性)

多态         多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数。         最简单的例子就是使用同样的运算符'+',可以实现整数与整数之间,浮点数与浮点数之间的加法运算。 多态的类型         面向对象的多态性可以分为4类:重载多态﹑强制多态、包含多态和参数多态。

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

pta-2024年秋面向对象程序设计实验一-java

文章申明:作者也为初学者,解答仅供参考,不一定是最优解; 一:7-1 sdut-sel-2 汽车超速罚款(选择结构) 答案: import java.util.Scanner;         public class Main { public static void main(String[] arg){         Scanner sc=new Scanner(System

如何校准实验中振镜频率的漂移

在实验过程中,使用共振扫描振镜(如Cambridge Technology的8kHz振镜)时,频率漂移是一个常见问题,尤其是在温度变化或长期运行的情况下。为了确保实验的准确性和稳定性,我们需要采取有效的校准措施。本文将介绍如何监测、调节和校准振镜频率,以减少漂移对实验结果的影响。 1. 温度管理和稳定性控制 振镜的频率变化与温度密切相关,温度的升高会导致机械结构的变化,进而影响振镜的共

实验C语言“union”的最基础语法

目标 最近在看Rust的“菜鸟教程”,看到 Rust 枚举类 时我发现它所定义的“枚举类”虽然也能像C语言枚举类那样使用,但是多了些功能:对于某个枚举的成员,还可以附带独特的数据,这让我想起了C语言中的union。 而我事实上对union没有使用经验,我自己写程序的时候不用它,看其他的项目的程序时印象里也没见过它。所以我对union的设计意图理解不深(可能只是为了节省内存?)。本篇的目标是对其