实验三 .Java 语言继承和多态应用练习 (课内实验)

一、实验目的

本次实验的主要目的是通过查看程序的运行结果及实际编写程序,练习使用
Java 语言的继承特性。

二、实验要求

1. 认真阅读实验内容,完成实验内容所设的题目
2. 能够应用多种编辑环境编写 JAVA 语言源程序
3. 认真体会多态与继承的作用
4. 将实验结果书写在实验报告中

三、实验内容

1. 运行下列程序,观察程序的运行结果
A.程序一
package org.example;public class Main
{public static void main(String[] arg){Son y=new Son();System.out.println("a of son is :" +y.a);System.out.println("b of son is :" +y.b);y.miner();y.sminer();System.out.println("a of son is :" +y.a);System.out.println("b of son is :" +y.b);}
}
class Father //父类的定义
{int a=200;int b=100;public void miner(){a--;}
}class Son extends Father //子类的定义
{public void sminer(){b++;}
}
B程序二
package org.example;public class Main
{public static void main(String args[]){son id3 = new son();id3.print();}
}
class father
{int a=3;//父类成员变量public void print(){System.out.println("father");}
}
class son extends father {float a = 4f;//子类成员变量public void print() {int a = 5;//局部变量super.print();System.out.println("son");System.out.println(a);System.out.println(this.a);System.out.println(super.a);}
}
C.程序三
package org.example;public class Main
{public static void main(String[] arg){father x=new father();son y=new son();System.out.print("add() of father is :");x.print();System.out.print("add() of son is :");y.print();System.out.println("sub() of son is :" +y.sub());System.out.println("sub(int i) of son is :" +y.sub(10));System.out.println("sub(int i,int j) of son is :" +y.sub(10,5));System.out.println("sub(String s) of son is :" +y.sub("6"));}
}
class father
{private int i,j;father(){this.i=23;this.j=35;}protected int add(){return i+j;}public void print(){System.out.println("i+j="+add());}
}
class son extends father
{private int x;son(){this.x=25;} protected int add()//方法被覆盖
{return x+35;
}public int sub()//方法的重载{return x-15;}public int sub(int i){return x-i;}public int sub(int i,int j){return x-i-j;}public int sub(String s){int f=Integer.parseInt(s);return x-f;}
}
D.程序四
package org.example;public class Main
{public void useSubAsfather(father x){System.out.println(x.getx()+"!!!!!!");}public static void main(String arg[]){father superA=new father(),superB;son subA=new son(),subB;(new Main()).useSubAsfather(subA);superB=subA;System.out.println("superA.getx():"+superB.getx());subB=(son)superB;System.out.println(subB.getx()+" "+subB.gety());}
}
class father
{private int x=100;public int getx(){return x;}
}
class son extends father
{private int y=200;public int gety(){return y;}
}
运行结果如下
2.查看运行结果,完成下列程序
package org.example;public class S35 {private int x;S35() {this.setValues(12.5f);}private void setValues(float v) {}S35(float y) {this.setValues(y, 10);}void setValues(float x, int y) {this.x = 20;System.out.println("result is " + (this.x + x + y));}public static void main(String[] args) {S35 s1 = new S35();}
}
运行结果为:
result is 42.5
3.编写程序实现下列功能
(1) 定义一个矩形类,实现求面积和周长的操作,再定义一个正方形类,要求
其继承于矩形类,并求出正方形的面积,要求显示出计算结果。数据可以用常数。
class Rectangle {protected int width;protected int height;public Rectangle(int width, int height) {this.width = width;this.height = height;}public int area() {return width * height;}public int perimeter() {return 2 * (width + height);
}
}class Square extends Rectangle {public Square(int sideLength) {super(sideLength, sideLength);}
}public class Main {public static void main(String[] args) {// 创建一个矩形Rectangle rectangle = new Rectangle(3, 4);System.out.println("矩形的面积: " + rectangle.area());System.out.println("矩形的周长: " + rectangle.perimeter());// 创建一个正方形Square square = new Square(5);System.out.println("正方形的面积: " + square.area());}
}
(2) 设计一个计算完成两数的加、减、乘与除的运算的类。
package org.example;public class Main {public static void main(String[] args) {Main calculator = new Main();// 两数相加double additionResult = calculator.add(10, 5);System.out.println("10 + 5 = " + additionResult);// 两数相减double subtractionResult = calculator.subtract(10, 5);System.out.println("10 - 5 = " + subtractionResult);// 两数相乘double multiplicationResult = calculator.multiply(10, 5);System.out.println("10 * 5 = " + multiplicationResult);// 两数相除double divisionResult = calculator.divide(10, 5);System.out.println("10 / 5 = " + divisionResult);}// 加法public double add(double num1, double num2) {return num1 + num2;}// 减法public double subtract(double num1, double num2) {return num1 - num2;}// 乘法public double multiply(double num1, double num2) {return num1 * num2;}// 除法public double divide(double num1, double num2) {if (num2 == 0) {System.out.println("Error: Division by zero");return Double.NaN;}return num1 / num2;}
}
(3) 编程创建一个 Point 类,在其中定义两个变量表示一个点的坐
值,再定义构造函数初始化为坐标原点,然后定义一个方法实现点的移动,再
定义一个方法打印当前点的坐标。并创建一个对象验 证。
package org.example;public class Main {private int x;private int y;// 构造函数初始化为坐标原点public Main() {this.x = 0;this.y = 0;}// 移动点的方法public void move(int dx, int dy) {this.x += dx;this.y += dy;}// 打印当前点的坐标方法public void printCoordinates() {System.out.println("Current coordinates: (" + this.x + ", " + this.y + ")");}// 验证public static void main(String[] args) {Main point = new Main();point.printCoordinates();  // 输出 (0, 0)point.move(3, 4);point.printCoordinates();  // 输出 (3, 4)}
}
(4)编写一个类,该类有如下一个方法:
public int f(int a,int b){
//要求该方法返回 a 和 b 的最大公约数
}
再编写一个该类的子类,要求子类重写方法 f(),而且重写的方法将返回两
个整数的最小公倍数。
要求:在重写的方法的方法体中首先调用被隐藏的方法返回 a 和 b 的最大公
约数 m,然后将(a*b)/m 返回,在应用程序的主类中分别使用父类和子类创建对
象,并分别调用方法 f()计算两个正整数的最大公约数和最小公倍数。
package org.example;public class Calculate {// 方法返回 a 和 b 的最大公约数public int f(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;}
}
package org.example;// 子类,重写父类方法返回两个整数的最小公倍数
public class CalculateLCM extends Calculate {// 重写 f 方法,返回两个整数的最小公倍数@Overridepublic int f(int a, int b) {int gcd = super.f(a, b); // 调用父类方法返回 a 和 b 的最大公约数return (a * b) / gcd; // 返回两个整数的最小公倍数}
}
package org.example;public class MainApp {public static void main(String[] args) {// 使用父类创建对象Calculate calculate = new Calculate();int gcd = calculate.f(12, 18);System.out.println("最大公约数:" + gcd);// 使用子类创建对象CalculateLCM calculateLCM = new CalculateLCM();int lcm = calculateLCM.f(12, 18);System.out.println("最小公倍数:" + lcm);}
}
(5)编写一个 Java 应用程序 Test 类,实现成员方法 max(a,b)的重载。具体
要求如下:
a. 编写 void max(int a,int b)成员方法,对两个整数进行大小的比较,输出打
印较大的那个整数。
b.编写 void max(float a,float b)成员方法,对两个 float 数进行大小的比较,
输出打印较大的那个 float 数。
c. 编写 void max(double a,double b)成员方法,对两个 double 数进行大小的
比较,输出打印较大的那个 double 数。
package org.example;public class Main {// 对两个整数进行大小的比较void max(int a, int b) {if (a > b) {System.out.println("较大的整数是:" + a);} else {System.out.println("较大的整数是:" + b);}}// 对两个float数进行大小的比较void max(float a, float b) {if (a > b) {System.out.println("较大的float数是:" + a);} else {System.out.println("较大的float数是:" + b);}}// 对两个double数进行大小的比较void max(double a, double b) {if (a > b) {System.out.println("较大的double数是:" + a);} else {System.out.println("较大的double数是:" + b);}}public static void main(String[] args) {Main test = new Main();test.max(5, 10);test.max(3.14f, 2.71f);test.max(3.1415926, 2.7182818);}
}

下面是实验总结

  1. 继承是面向对象编程中的重要特性,可以帮助我们实现代码的重用和扩展。

  2. 子类可以继承父类的属性和方法,同时可以重写父类的方法或者新增自己的方法。

  3. 在使用继承时,需要注意父类和子类之间的关系,确保子类是父类的特殊化。

  4. 继承可以帮助我们构建更加清晰和易于维护的代码结构。

  5. 在实际编写程序时,可以根据具体的需求来设计合适的继承关系,以实现代码的复用和扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1409924.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【项目构建】04:动态库与静态库制作

OVERVIEW 1.编译动态链接库(1)编译动态库(2)链接动态库(3)运行时使用动态库 2.编译静态链接库(1)编译静态库(2)链接静态库(3)运行时使…

【数据结构-之八大排序(下),冒泡排序,快速排序,挖坑法,归并排序】

🌈个人主页:努力学编程’ ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 …

信息管理与信息系统就业方向及前景分析

信息管理与信息系统(IMIS)专业的就业方向十分广泛,包含计算机方向、企业信息化管理、数据处理和数据分析等,随着大数据、云计算、人工智能、物联网等技术的兴起,对能够处理复杂信息系统的专业人才需求激增,信息管理与信息系统就业…

动态数据结构中的表扩张性:摊还分析、伪代码与C语言实现

动态数据结构中的表扩张性:摊还分析、伪代码与C语言实现 引言表扩张性的概念摊还分析在表扩张性中的应用伪代码示例:TABLE-INSERT操作C语言实现结论 引言 在处理数据结构时,尤其是表(或数组),我们经常面临…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

Javascript:Web APIs(一)

Javascript基础(一) Javascript基础(二) Javascript基础(三) Javascript基础已经结束,接下来我们将进入到整个Web API学习中,在此,我们将学习DOM操作,基本的…

免费、中文版的 Postman 替代工具,提高工作效率

为啥不用 Postman Postman 是挺好用的,但是人家就是死活不支持中文啊。。。这也导致了上手门槛的增高,劝退了很多人~ 接下来推荐几款可以替代 Postman 的国产 API 工具。 怎么替代? 先来说说国内有哪些API工具: ApifoxEolink…

图像预处理工具_CogImageFileTool

CogImageFileTool工具可以用来将单张图片或idb格式的图片数据库读入内存。也可使用CoglmageFileTool工具将图片插入到.idb数据库里。 添加工具 参数介绍 文件名 写入模式 读取模式 删除

暗区突围端游海外版测试怎么预约 暗区突围预约教程的图文教程分享

暗区突围端游海外版测试怎么预约 暗区突围预约教程的图文教程分享 《暗区突围》一款大逃杀类的fps类型游戏,游戏的核心玩法是撤离暗区并收集物资,玩家可根据不同策略选择装备,并在战局中搜集信息,最终逃离暗区赢得游戏&#xff0…

LLM应用:AI代码助手插件

vscode code助手在线插件 1)国内 codegeex (清华) https://codegeex.cn/ iflycode(讯飞) http://iflycode.xfyun.cn/ comate(百度) https://comate.baidu.com/zh/download lingma&#xff…

咸鱼之王攻略:2024强阵容搭配

欢迎来到《咸鱼之王》的世界!作为一款集合了策略与角色扮演元素的游戏,本攻略将为您提供一系列关于游戏阵容搭配和咸将选择的建议,帮助您在游戏中更好地获得胜利。 1.了解游戏阵营 《咸鱼之王》分为四个阵营:魏、蜀、吴、群。每个…

IOS上线操作

1、拥有苹果开发者账号 2、配置证书,进入苹果开发者官网(https://developer.apple.com/) 3、点击账户(account),然后创建一个唯一的标识符 4、点击"Identifiers",然后点击"&qu…

是机遇?是未来?拥抱 AI Agent ,拥抱 AI 2.0时代~

✍️ 作者:哈哥撩编程(视频号同名) 博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅 程序员:职场关键角色通识宝…

区块链 | IPFS 工作原理入门

🦊原文:What is the InterPlanetary File System (IPFS), and how does it work? 🦊写在前面:本文属于搬运博客,自己留存学习。 1 去中心化互联网 尽管万维网是一个全球性的网络,但在数据存储方面&#…

模块六:模拟——1419.数青蛙

文章目录 题目描述算法原理解法(模拟 分情况讨论) 代码实现 题目描述 题目链接:1419.数青蛙 算法原理 解法(模拟 分情况讨论) 模拟⻘蛙的叫声。 当遇到 ‘r’ ‘o’ ‘a’ ‘k’ 这四个字符的时候,我…

ctfshow web入门 sql注入 web201--web208

web201 先扫描先 python .\sqlmap.py -u "http://4863661d-2371-4812-ae62-128fadbdc0a4.challenge.ctf.show/api/?id" --user-agentsqlmap 加头 python .\sqlmap.py -u "http://4863661d-2371-4812-ae62-128fadbdc0a4.challenge.ctf.show/api/?id" --u…

考研数据结构chap8排序

目录 一、概念 1.评价 (1)稳定性 (2)Tn、Sn 2.分类 (1)内部排序 (2)外部排序 二、插入排序 1.直接插入排序(InsertSort) (1)思路 (2&am…

四元数代数

书籍:Quaternion Algebras 作者:John Voight 出版:Springer 书籍下载-《四元数代数》这本教科书全面介绍了四元数代数和阶的算术理论,这一主题在数学的不同领域都有应用。这本书为研究生读者撰写,易于阅读和理解&am…

24华东杯A题9页完整思路+代码+可视化图表

​比赛题目的完整版思路可执行代码数据参考论文都会在第一时间更新上传的,大家可以参考我往期的资料,所有的资料数据以及到最后更新的参考论文都是一次付费后续免费的。注意:(建议先下单占坑,因为随着后续我们更新资料…

[]2024年第⼗五届蓝桥杯全国软件和信息技术专业人才大赛(Web 应用开发)

一、爱拼才会赢(5分) 介绍 由爱拼社举办的拼图⼤赛进⾏到最后⼀关,1 号选⼿⼩蓝披荆斩棘成为全场⿊⻢。本关卡需要选⼿使⽤ CSS Grid 布局完成拼图⻚⾯,但是由于⼩蓝技术⽔平有限,拼图的效果没有达到预期。现在邀请你…