实验目的
熟悉面向对象编程中抽象类、接口及异常检测。
实验内容
1
2023年杭州亚运会共设多种球类比赛项目,包括足球、篮球、排球、乒乓球(9)、羽毛球(9)、网球(7)、橄榄球等,这些都可以称之为“球”。请通过分析,抽象它们所共有的性质,定义一个抽象类Ball。在报告中附上程序截图、运行结果截图(要求以中国队获得奖牌数量最多的三个球类运动项目为例)和详细的文字说明
程序截图:
运行结果截图:
文字说明:
程序定义了一个抽象类Ball,具有成员变量name,equipment(名字和装备),含有一个构造方法,print方法,和抽象方法play,然后分别创建了三个类PingPong,Badminton,Tennis,都继承自Ball类,并实现了抽象方法play;此外,还创建了一个Test类进行测试。
2
编写一个抽象类Animal,它具有三个抽象方法moving, eating和yelling。分别实现这个抽象类的三个子类Tiger、Parrot和Dolphin。实现一个测试类,在测试类的main方法中分别使用这三个子类创建对象实体,然后通过它们的上转型对象变量调用moving()方法、eating()方法和yelling()方法。在报告中附上程序截图、运行结果截图和详细的文字说明。
程序截图:
运行结果截图:
文字说明:
代码编写了一个抽象类Animal,它具有三个抽象方法moving, eating和yelling。分别实现这个抽象类的三个子类Tiger、Parrot和Dolphin。然后实现了一个Test类,在测试类的main方法中分别使用这三个子类创建对象实体,然后通过它们的上转型对象变量调用moving()方法、eating()方法和yelling()方法,并打印出结果。
3
一个五维向量由五个分量组成。五维向量的相加、相减和点乘等价于对应五个分量的相加、相减和相乘。比如两个五维向量(5,2,1,8,10)和(3,-1,0,-4,1),它们的和为(8,1,1,4,11),它们的差为(2,3,1,12,9),它们的点乘为(15,-2,0,-32,10)。编写一个接口Computable,它具有三个抽象方法add、minus和elementwiseProduct。编写一个Vector类,通过Computable接口实现五维向量的相加、相减和点乘。在报告中附上程序截图、运行结果截图和详细的文字说明。
程序截图:
运行结果截图:
文字说明:
代码编写了一个接口Computable,它具有三个抽象方法add、minus和elementwiseProduct。然后编写了一个vector类,通过Computable接口实现五维向量的相加、相减和点乘,并在main里头测试,并打印输出了结果。
4
Comparable接口定义了compareTo方法,用于比较两个对象,自行查找资料了解Comparable接口。设计一个GeometricObject类,实现Comparable接口,同时声明抽象方法getArea计算几何图形的面积。设计两个子类Circle和Rectangular,分别继承自GeometricObject。分别创建一个Circle对象和一个Rectangular对象,利用GeometricObject的compareTo方法比较两个对象的大小。
程序截图:
运行结果截图:
文字说明:
代码设计了GeometricObject类,实现了Comparable接口,同时声明抽象方法getArea计算几何图形的面积。设计了两个子类Circle和Rectangular,分别继承自GeometricObject。然后在测试类Test里头的main函数里面分别创建一个Circle对象和一个Rectangular对象进行测试,并利用了GeometricObject的compareTo方法比较两个对象的大小,然后输出测试结果。
5
编写bin2Dec(String binaryString)方法,将一个二进制字符串转换为十进制数。(1)实现bin2Dec方法,在字符串不是一个二进制字符串时抛出NunberFormatException异常。编写测试程序,提示用户以字符串形式输入一个二进制数字并显示其对等的十进制数字。如果方法抛出异常,则显示“不是二进制数字”。(2)定义一个名为BinaryFormatException的自定义异常,实现bin2Dec方法,在字符串不是一个二进制字符串时抛出BinaryFormatException异常,重复步骤(1)的测试。
(1)
程序截图:
import java.util.Scanner;
public class BinaryConvert {
public static int bin2Dec(String binaryString) throws NumberFormatException{
for (char c : binaryString.toCharArray()) {
if (c != '0' && c != '1') {
throw new NumberFormatException("不是二进制数字");
}
}
int ans = 0,cnt=0;
for (int i = binaryString.length() - 1; i >= 0; i--) {
if (binaryString.charAt(i) == '1') {
ans += Math.pow(2, cnt);
}
cnt++;
}
return ans;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请以字符串形式输入一个二进制数字:");
String bin_num= scanner.nextLine();
try {
int ans= bin2Dec(bin_num);
System.out.println("对应的十进制数字为: " + ans);
} catch (NumberFormatException e) {
System.out.println("不是二进制数字");
}
}
}
运行结果截图:
文字说明:
在这个代码中,我们定义了bin2Dec方法,该方法接受一个字符串参数,并尝试将其转换为十进制数。在方法内部,我们首先检查字符串是否是一个有效的二进制字符串,如果不是,则抛出NumberFormatException异常。如果字符串是一个有效的二进制字符串,我们使用将其转换为十进制数,然后返回结果。在main方法中,我们使用Scanner类来接收用户输入的二进制字符串。然后,我们调用bin2Dec方法并捕获可能抛出的NumberFormatException异常。如果没有异常发生,我们将打印出转换后的十进制数。如果抛出了异常,我们将打印出"不是二进制数字"的消息。
(2)
程序截图:
import java.util.Scanner;
public class BinaryFormatException extends Exception{
String message;
BinaryFormatException(){
message="输入的数字不是一个二进制数字";
}
public String getMessage(){
return message;
}
public static int bin2Dec(String s) throws BinaryFormatException{
for(char c:s.toCharArray()){
if(c!='0'&&c!='1'){
BinaryFormatException ex=new BinaryFormatException();
throw(ex);
}
}
int res=0,cnt=0;
for(int i=s.length()-1;i>=0;i--){
if(s.charAt(i)=='1'){
res+=Math.pow(2,cnt);
}
++cnt;
}
return res;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请以字符串形式输入一个二进制数字:");
String bin_num=scanner.nextLine();
try{
int ans=bin2Dec(bin_num);
System.out.println("结果为"+ans);
}
catch(BinaryFormatException e){
System.out.println((e.getMessage()));
}
}
}
运行结果截图:
文字说明:
这段代码实现了一个名为 BinaryFormatException 的自定义异常类,并定义了 bin2Dec 方法用于将二进制字符串转换为十进制数。该类包含一个字符串类型的 message 成员变量,用于存储异常信息。提供了一个无参构造函数和一个 getMessage 方法,用于获取异常信息。在 bin2Dec 方法中,首先通过遍历输入的字符串,检查是否存在非二进制数字,如果存在非二进制数字,则创建一个 BinaryFormatException 异常对象,并抛出该异常。如果输入的字符串是一个有效的二进制数字,则将二进制字符串转换为十进制数,并返回结果。在 main 方法中,我们使用 Scanner 类接收用户输入的二进制字符串,并调用 bin2Dec 方法进行转换。如果转换过程中抛出了 BinaryFormatException 异常,我们捕获异常并打印出异常信息。否则,打印出转换后的十进制数。
6
关于面向对象编程中的三个特性(封装、继承和多态),谈谈你的理解,并对封装或继承,通过类比、关联或演绎的方式,举一个在日常的学习生活中可以应用的例子(要求积极向上且能自圆其说)。
例子:在学习生活中,我们可以将不同类型的课程抽象为一个Course类,然后通过继承创建不同具体课程的子类,如MathCourse、EnglishCourse等。这些子类可以继承父类的共同属性和方法,如课程名称、授课教师等,同时可以根据具体课程的特点添加额外的属性和方法,如数学课程可以有求解计算题方法,英语课程可以有背诵单词的方法。