JAVA实验01
java封装实验报告总结

java封装实验报告总结一、实验目的本次实验的主要目的是理解并掌握Java语言中的封装特性,通过实际操作和代码编写,深入理解面向对象编程的基本思想。
二、实验原理封装是面向对象的三大特性之一,其主要思想是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问。
如果需要访问这些信息,必须通过该类提供的公共接口进行访问。
这样可以保证对象的安全性,同时也能提高代码的可维护性和复用性。
三、实验步骤1. 定义一个类,如Person类,包含姓名、年龄等属性。
2. 在Person类中定义getter和setter方法,用于获取和设置属性值。
3. 在主函数中创建Person类的对象,并通过getter和setter方法访问和修改对象的属性。
四、实验代码```javapublic class Person {private String name;private int age;public String getName() {return name;}public void setName(String name) { = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}public class Main {public static void main(String[] args) {Person person = new Person();person.setName("Tom");person.setAge(20);System.out.println(person.getName());System.out.println(person.getAge());}}```五、实验结果与分析运行上述代码,输出为"Tom"和"20",说明我们成功地通过getter和setter方法访问和修改了对象的属性。
面向对象(Java)实验01、熟悉Java程序的编写及执行过程

图1-5编译Java程序
图1-6运行Java程序
(3)编写一个Java Applet,使之能够在浏览器中显示“Welcome to Java Applet World”的字符串信息。
图1-7编写Java Applet程序
图1-8编写html文档
图1-9运行Applet小程序
四
步骤②:编译Java 源程序
Java 源程序编写后,要使用Java编译器(javac.exe)将Java 源程序编译成字节码文件。Java源程序都是扩展名为.java的文本文件。编译时首先读入Java源程序,然后进行语法检查,如果出现问题就终止编译。语法检查通过后,生成可执行程序代码即字节码,字节码文件名和源文件名相同,扩展名为.class。
<html>
<head>
<title>Test Applet</title>
</head>
<body>
<applet code=MyApplet.classheight=100 width=300></applet>
</body>
</html>
步骤④:在命令提示符窗口键入如下命令,
D:\java>appletviewer page.htm
电子信息学院
实验报告书
课程名:
面向对象程序设计(Java)
题目:
实验01熟悉Java程序的编写
及执行过程
实验类别:
【验证】
班级:
BX1210
学号:
121003531028
姓名:
俞佳星
JAVA实验报告

JA V A实验报告实验一 Java开发环境及基本语法一、实验目的1、掌握常用的Java 集成开发环境的使用,特别是Eclipse 和NetBeans。
2、掌握Java 基本语法,重点是面向对象的思想和语法。
3、掌握控制台下(应用程序)的输入输出方法,作为后续部分实验的基础。
二、实验类型设计型。
三、实验内容1、打开实验室计算机上的集成开发环境Eclipse 或NetBeans(重点是Eclipse)了解开发软件的各个菜单功能。
会创建java 项目(Project),会编辑和编译、运行项目代码。
、。
2,验证和学习所给的几个例子程序及其讲解。
然后自己编写一个至少由一个类构成的Java 程序,其功能是在运行后,能接收用户输入一个学生的姓名以及java 课的成绩(百分制),并输出对该学生成绩是否达到60 分的及格分的判断(可使用if 语句)。
例如,输入学生姓名李明,然后输入成绩50,则输出“ 李明的成绩为不及格”。
3、编写一个程序来表示长方体的长宽高等数据并有计算体积的函数可供调用,长方体类从矩形类继承而来。
程序运行时能接受输入任意的 3 个数作为长方体的长、宽和高,然后能够输出所输入的长宽高及所计算出的体积。
注意不能把代码全部写在main 函数里面,不能直接输出长宽高的乘积。
代码如下;第一个import java.util.Scanner;public class Test{public static void main(String[] args) {String str; // 定义一个字符串变量strint i; // 定义一个整型变量iScanner sc = new Scanner(System.in); // 定义一个Scanner对象,从System.in接受输入System.out.print("输入学生姓名");str = sc.next(); // 等待用户输入任意一个字符串,它会被存到str中System.out.println("姓名:" + str); // 输出字符串strSystem.out.print("输入学生的分数:");i = sc.nextInt(); // 等待用户输入任意一个整数,它会被存到i中if(i<60)System.out.print("他的JAVA不及格,成绩是" + i );elseSystem.out.println("他的JAVA成绩是:" + i); // 输出整数i}}第二个import java.util.Scanner;public class wwh {public static void main(String[] args) {int Long; // 矩形的长int wide; // 矩形的宽int High; // 长方体的高S canner sc = new Scanner(System.in);S ystem.out.print("输入长");L ong = sc.nextInt();S ystem.out.print("输入宽");w ide=sc.nextInt();S ystem.out.print("输入高");H igh=sc.nextInt();T j T=new Tj(Long,wide,High);T.show1();}}class Vehicle{int Long; // 矩形的长int wide; // 矩形的宽Vehicle(int Long,int wide){this.Long=Long;this.wide=wide;}int getArea(){r eturn Long*wide;}void show(){System.out.println("长:"+Long);System.out.println("宽:"+wide);System.out.println("矩形的面积为; "+this.getArea()); }} //class Tj extends Vehicle{int High; // 载人数Tj(int Long,int Wide,int High){super(Long,Wide); // 调用父类的构造函数,对从父类继承而来的成员变量进行初始化this.High=High;}int getTiji(){r eturn super.getArea()*High;}void show1(){s uper.show();// 调用父类方法S ystem.out.println("长方体的高为:"+High);System.out.println("长方体的体积;"+this.getTiji());}}实验二系统类和数组一、实验目的1、通过字符串处理类的应用,掌握系统类的使用方法。
学习猿地_Java_01_Java程序开发入门

HelloWorld.java
/** 第一个Java 程序 */ public class HelloWorld {
/** * 软件入口方法 */ public static void main(String[] args) {
// 输出 Hello World! System.out.println("Hello World!"); } }
Java发展历史
• 1991年 Sun Green。 • 1992年 James Gosling Oak。 • 1995年 Java问世。 • 1996年 Java 1.0。 • 1999年 Java 1.2发布(JAVA SE\JAVA EE\JAVA ME)。 • ... ... ... • 2004年 Tiger 发布(JAVA5.0),Java 登录火星。 • 2007年 Java6.0。 • 2009年 Oracle以超过70亿美元的交易总值收购了Sun。 • 2011年 7月由Oracle正式发布Java7.0。 • 2014年 3月19日,甲骨文公司发布Java8.0的正式版。 • 2017年 9月21日,Java9.0正式发布。 • 2018年 3月21日,Oracle 官方宣布Java10正式发布。 • 2018年 9月25日,Oracle 官方宣布Java11正式发布。
Java语言的江湖地位
桌面应用
Java SE 简介
• Java SE(Java Platform, Standard Edition)称之为 “Java平台标准版”,是Java平台的基础。 ﹣ Java SE包含了运行Java应用所需要的基础环境和核心 类库。 ﹣ Java SE还定义了基于桌面应用的基础类库,通过使用 这些类库,我们可以编写出类似于像Office那样的丰富 多彩的桌面应用。
Java程序设计——01简介

赵志崑
感谢!
本课程全部ppt和源代码可以从“网上课堂”下 载
赵志崑
计算机科学与技术学院 赵志崑 zhaozk@
Java语言简介
• Java语言是由Sun公司创造和发展的一门程序设计语言,在 程序设计语言家族中占有重要地位。 • 使用Java语言的Java平台,应用领域非常广泛,覆盖了桌 面、 Internet、企业、嵌入式设备、移动设备等。
Java语言的特点
• 简单:语法类似C++;基础解释器和类40KB。 • 面向对象:一切皆是对象。 • 可移植性、中立体系结构:一致的数据类型大小,一致的 界面风格,不依赖于特定处理器和操作系统。 • 解释型:Java字节码文件在虚拟机上解释执行。 • 动态性:动态类加载、反射机制。 • 分布式:易于使用TCP/IP协议、URL资源、远程方法调用 RMI。 • 多线程:多线程处理非常简单。 • 高性能:即时编译—JIT。 • 健壮性:编译器早期错误检查、虚拟机后期动态检查。 • 安全:异常处理机制和安全机制,可以防止堆栈溢出、访 问进程空间外内存、Applet访问本地文件。 赵志崑
赵志崑
授课方式
• 课堂讲解
– 语言的原理与机制。 – 代表性的例子。
• 课后作业
– 每部分一道程序设计题目,上机完成。 – 实验课上随机抽查程序完成情况。 – 重点题目要求写出实验报告,全体上交。
• 其它
– 课后可在教师休息室答疑,有问题和建议可通过 Email联系。
赵志崑
考核方式
• 平时成绩(10%)
Base Class Library
Common Language Runtime Windows COM+ Services 赵志崑
签名加密_Java_hutool(01代码实现)

签名加密_Java_hutool(01代码实现) 本⽂档不讲解签名/加密相关的理论知识, 仅列出通过Java实现的⽅式.对称加密加解密使⽤的是同⼀个秘钥基于“对称密钥”的加密算法主要有DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish等。
本⽂只介绍最常⽤的对称加密算法DES、3DES(TripleDES)和AES。
⾮对称加密加解密使⽤的是不同的秘钥基于“⾮对称密钥”的加密算法主要有RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
使⽤最⼴泛的是RSA算法,Elgamal是另⼀种常⽤的⾮对称加密算法。
使⽤场景在互联⽹后端技术中⾮对称加密技术主要⽤于登录、数字签名、数字证书认证等场景。
疑问: 既然堆成加密存在安全问题, 为什么还使⽤对称加密呢? ( 我同事告诉我, 当前功能不开放到外⽹, 使⽤对称加密即可 )使⽤到的依赖包hutool<!-- https:///artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.6.1</version></dependency>AES对称加密/解密public String encryptAES(String data, String key) throws Exception {//⽣成⼀个随机秘钥//byte[] keyRandom = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();//将秘钥转为Base64//String keyRandomEncode = Base64.encode(keyRandom);key = "EC/Z+S7c3EFJa2dtvLyekg==";//将Base64编码的秘钥的格式进⾏解码转换byte[] keyByte = Base64.decode(key);//加密AES aes = SecureUtil.aes(keyByte); //构建byte[] encryptData = aes.encrypt(data); //加密//加密后的数据转为Base64String encryptDataEncode = Base64.encode(encryptData);//将Base64编码加密数据和秘钥的格式进⾏解码转换byte[] data2 = Base64.decode(encryptDataEncode);byte[] key2 = Base64.decode(key);//解密AES aes2 = SecureUtil.aes(key2);byte[] decrypt = aes.decrypt(data2);return "秘钥: "+ key + ", 加密后的数据: "+ encryptDataEncode + ", 解密后的数据: "+ new String (decrypt);}其他@Override public String dataSign(MsgForm msgForm) throws Exception {String ywData = msgForm.getData();String prikeyYlf = msgForm.getPrivateKey();msgForm.getKeyLen();Sign sign = new Sign(SignAlgorithm.SHA1withRSA, prikeyYlf, null);byte[] encrypt = sign.sign(StrUtil.bytes(ywData, CharsetUtil.CHARSET_UTF_8));return Base64.encode(encrypt);}@Override public boolean verifySign(MsgForm msgForm) throws Exception {String ywData = msgForm.getData();String signData = msgForm.getSignData();String publicKey = msgForm.getPublicKey();msgForm.getKeyLen();Sign sign = new Sign(SignAlgorithm.SHA1withRSA, null, publicKey);boolean encrypt = sign.verify(StrUtil.bytes(ywData), Base64.decode(signData));//return Base64.encode(encrypt);return encrypt;}@Override public String encrypt(MsgForm msgForm) throws Exception {RSA rsa = new RSA(null, msgForm.getPublicKey());byte[] encrypt = rsa.encrypt(StrUtil.bytes(msgForm.getData(), CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);return Base64.encode(encrypt);}@Override public String decrypt(MsgForm msgForm) throws Exception {RSA rsa = new RSA(msgForm.getPrivateKey(), null);byte[] decrypt = rsa.decrypt(Base64.decode(msgForm.getData()), KeyType.PrivateKey);return Base64.encode(decrypt);}@Override public void dataReceive(MsgForm msgForm) throws Exception {SimpleDateFormat ft = new SimpleDateFormat("yyyyMMddHHmmsszzz");StringBuffer filePath = new StringBuffer(Config.getProperty("download.path"));filePath.append("99_");filePath.append(msgForm.getBusiCode()+"_"); //业务类型(6)filePath.append(ft.format(new Date())+"_"); //yyyyMMddhhmisszzz(17)filePath.append(new Random().nextInt(10)); //2位随机数filePath.append(new Random().nextInt(10));filePath.append(".XML"); //.XML//将数据写⼊到filePathFileWriter fw = new FileWriter(filePath.toString(),"UTF-8");byte[] pdfData = Base64.decode(msgForm.getData());fw.write(pdfData,0,pdfData.length);}@Override public String encryptAES(String data, String key) throws Exception {//⽣成⼀个随机秘钥//byte[] kkkkRandom = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();//将秘钥转为Base64//key = Base64.encode(kkkkRandom);//key = "7Df05RgSzVm8/wWzUeTDaA==";//将Base64编码的秘钥的格式进⾏解码转换byte[] keyByte = Base64.decode(key);//加密AES aes = SecureUtil.aes(keyByte); //构建byte[] encryptData = aes.encrypt(data); //加密//加密后的数据转为Base64return Base64.encode(encryptData);}@Override public String decryptAES(String data, String key) throws Exception {//key = "7Df05RgSzVm8/wWzUeTDaA==";//将Base64编码加密数据和秘钥的格式进⾏解码转换byte[] dataByte = Base64.decode(data);byte[] keyByte = Base64.decode(key);//解密AES aes = SecureUtil.aes(keyByte); //构建byte[] decrypt = aes.decrypt(dataByte); //加密return new String (decrypt); //转换为字符串返回}。
Java开发环境实验报告

Java开发环境实验报告一、实验项目名称Java开发环境的熟悉二、实验目的1、掌握下载Java SDK 软件包、EditPlus 编辑软件的方法;2、掌握设置Java 程序运行环境的方法;3、掌握编写与运行Java 程序的方法;4、了解Java 语言的概貌;5、为学习Java 语言和进行Java 程序的实验做好准备工作。
三、实验基本原理1、SDK 的下载与安装下载能安装在Windows95/98/2000/NT、UNIX和Linux等操作系统类型中的J2SE系统安装程序。
为了建立基于SDK 的Java 运行环境,需要先下载Sun 的免费SDK 软件包。
SDK 包含了一整套开发工具,其中包含对编程最有用的是Java 编译器、Applet 查看器和Java 解释器。
在浏览器中输入/,可看到Sun 公司网站页面,然后在里面找到下载的链接进行下载就行。
目前的版本最高是Jdk1.5,但是在使用上更多的还是使用Jdk1.4版本。
下载完后进行安装,和一般的软件安装过程差不多,自己选择目录进行sdk的安装。
在本实验中假设sdk的安装路径是“C:\ j2sdk1.4.2_01“。
2、Java运行环境配置SDK 中的工具都是命令行工具,需要从命令行即MS-DOS 提示符下运行它们。
很多人可能会不习惯,但这是Sun 特意采取的策略,为的是把精力更多地投入到Java 语言本身而不是花在开发工具上。
为了能正确方便的使用SDK,可手工配置一些Windows 的环境变量,Windows 98 与Windows/xp/NT/2000 的配置略有不同。
(1)设置Windows 98在C:\autoexec.bat 文件中,添加以下内容:set path=%path%; C:\ j2sdk1.4.2_01\binset classpath=.; C:\ j2sdk1.4.2_01\lib\;%classpath%C:\ j2sdk1.4.2_01\bin 为程序安装路径,如果安装时做了修改,这里必须做出相应的修改。
实验01 白盒测试方法

实验01白盒测试方法[实验目的]1.掌握白盒测试技术2.能应用白盒测试技术设计测试用例;[预习要求]1.逻辑覆盖:逻辑覆盖按覆盖程度由低到高大致分为以下几类:(1)语句覆盖:设计若干测试用例,使程序中每一可执行语句至少执行一次;(2)判断覆盖:设计用例,使程序中的每个逻辑判断的取真取假分支至少经历一次;(3)条件覆盖:设计用例,使判断中的每个条件的可能取值至少满足一次;(4)判断/条件覆盖:设计用例,使得判断中的每个条件的所有可能结果至少出现一次,而且判断本身所有可能结果也至少出现一次;(5)条件组合覆盖。
设计用例,使得每个判断表达式中条件的各种可能组合都至少出现一次;显然,满足⑤的测试用例也一定是满足②、③、④的测试用例。
(6)路径覆盖。
设计足够的测试用例,使程序的每条可能路径都至少执行一次。
如果把路径覆盖和条件组合覆盖结合起来,可以设计出检错能力更强的测试数据用例。
2.基本路径测试:基本路径测试法在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法。
步骤:(1)依据代码绘制流程图(2)确定流程图的环路复杂度(3)确定线性独立路径的基本集合(4)设计测试用例覆盖每条基本路径[实验题]三角形问题输入三个整数a,b,c,分别作为三角形的三条边,现通过程序判断三条边构成三角形的类型为:a)一般三角形b)等边三角形c)等腰三角形d)不构成三角形要求:(1)编写代码:根据题目描述使用Java编写三角形类,其中包括判定三条边构成三角形的方法。
(2)绘制控制流图:列出所编写的代码,注明语句编号,画出程序的控制流图。
(3)设计测试用例:分别以语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合覆盖和路径覆盖方法设计测试用例,并写出每个测试用例的执行路径(用题中给出的语句编号表示)。
格式参照以下表格:(4)编写测试代码,执行测试:使用JUnit编写测试代码,并在上表中记录测试结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件开发基础 Java》实验报告
6
图 1-1 运行结果 (2)/** * * 创建学生类,并记录每个学生的信息 * * @author Administrator * */ public class Person { public String name; public String sex; public int age; public Person(String name, String sex, int age) { = name; this.sex = sex; this.age = age; } } class Student extends Person { public String StuNum; public String classNum; public void setAge(int age) { this.age = age; }
2
return (a + b + c); } } class Rectangle implements ShapeAreaPeri { int width, length; Rectangle(int w, int l) { width = w; length = l; } public double getArea() { return width * length; } public double getPerimeter() { return (2 * (width + length)); } } class Circle implements ShapeAreaPeri { int ridus; final double pi = 3.14; Circle(int r) { ridus = r; } public double getArea() { return pi * ridus * ridus; } public double getPerimeter() { return 2 * pi * ridus; } } public class InterfaceDemo { public static void main(String args[]) { ShapeAreaPeri[] sap = new ShapeAreaPeri[5]; sap[0] = new Rectangle(3, 7); sap[1] = new Rectangle(10, 8); sap[2] = new Circle(8); sap[3] = new Triangle(4, 4, 4); sap[4] = new Circle(2);
//一个参数构造方法,将虚部当作 0,调用两个参数的构造方法(两个参数的构造方法已包 含对父类构造方法的调用,无需再调用) //无参构造方法,将实部虚部都当作 0,调用两个参数的构造方法(两个参数的构造方法已 包含对父类构造方法的调用,无需再调用) //getImaginary 方法 //根据复数模长定义,重写父类求模长方法 //加法:参数与返回值都是 ComplexNumber 类型 //减法:参数与返回值都是 ComplexNumber 类型 //乘法:参数与返回值都是 ComplexNumber 类型 //除法:参数与返回值都是 ComplexNumber 类型,分母需要实数化,需用父类 isZero 判断 除数是否为 0,若为 0 返回用 0 构造的复数对象 } public class Demo { public static void main (String args []) { RealNumber r1=new RealNumber(1); RealNumber r2=new RealNumber(2); RealNumber sum = r1.Add(r2); //r1 和 r2 的和 //输出 r1 和 r2 的和差积商,注意输出信息的可读性 //输出 r1 和 0 的和差积商(需要用 0 构造实数类对象),注意输出信息的可读性, ComplexNumber c1=new ComplexNumber(1,2); ComplexNumber c2=new ComplexNumber(3,4); //输出 c1 和 c2 的和差积商,注意输出信息的可读性 //输出 c1 和 0 的和差积商(需要用 0 构造复数类对象),注意输出信息的可读性 } }
指导教师:
实验时间: 2015 年 3 月 11 日
《软件开发基础 Java》实验报告
1
一、实验目的
(1)掌握类的继承机制。 (2)熟悉类中成员变量和方法的访问控制。 (3)熟悉方法或构造方法多态性。 (4)熟悉接口的定义方法。
二、实验内容
(1)定义一个球类 Ball,包含一个私有成员变量——半径(double r),两个公有成员方法:设定 半径方法(void setR(double x)) 、得到半径值方法(double getR()) 。 定义一个台球类 Billiards,继承 Ball 类,包含一个私有成员变量——颜色(String color) , 两个公有成员方法:设定颜色方法 setColor()、输出信息方法 show(),其中 show()方法可以输出 该台球的颜色和半径值。 定义一个公有类 TestBall,测试前两个类。 (2)编写程序实现如下功能:已知 Person 类包含三个公共域变量(姓名、性别、年龄)和一个构 造方法,Student 类是 Person 类的派生类,包含两个新的公共域变量(学号、班号)、两个公 共方法(修改年龄、显示基本信息)及一个构造方法。定义一组学生对象,并初始化他们的基 本信息,然后依次输出。 (3)接口实验 程序文件 TestInterface.java。运行该程序,然后按【思考问题】内容修改和观察程序。 package .sdju.joshua; interface ShapeAreaPeri { double getArea(); double getPerimeter(); } class Triangle implements ShapeAreaPeri { int a, b, c; Triangle(int this.a = this.b = this.c = } a, int b, int c) { a; b; c;
电子信息学院 实验报告书
课 程 名 :
题 目:
软件开发基础 Java(2)
实验 01 继承、接口与多态 【验证、调试、设计】 软件 1412 141003330212 张杨松
实验类别: 班 学 姓 级: 号: 名:
评语: 实验态度:认真( 实验结果:正确( 实验理论:掌握( 操作技能:较强( 实验报告:较好( 成绩: ) ) ) ) ) 一般( ) 部分正确( 熟悉( ) 一般( ) 一般( ) 较差( ) 错( 了解( 较差( 较差( ) ) ) 生疏( ) ) 王中华 )
public double getArea() { double rp = (a + b + c) / 2.0; return Math.sqrt((rp - a) * (rp - b) * (rp - c)); } public double getPerimeter() {
《软件开发基础 Java》实验报告
《软件开发基础 Java》实验报告
3
for (int i = 0; i < 5; i++) { System.out.println("当前形状面积=" + sap[i].getArea()); System.out.println("当前形状周长=" + sap[i].getPerimeter()); } } }
三、实验结果(关键代码和运行结果)
/** * 测试台球类 * * @param args */ public class TestB告
5
public static void main(String[] args) { Billiards billiards = new Billiards("紅色", 10); billiards.show(); System.out.println("-----------"); billiards.setR(20); billiards.setColor("蓝色"); billiards.show(); } } class Boll { private double r; public Boll(double r) { this.r = r; } public double getR() { return r; } public void setR(double r) { this.r = r; } } class Billiards extends Boll { private String color; public Billiards(String color, double r) { super(r); this.color = color; } public void setColor(String color) { this.color = color; } /** * 显示台球的基本信息 */ public void show() { System.out.println("台球的顏色:" + color + "\t半径:" + getR()); } }
【思考问题】
①在实现类 Rectangle 中注释掉一个方法后进行编译,看发生了什么?为什么? ②在实现类 Rectangle 中将各实现方法前的 public 修饰符去掉再进行编译,看发生了什么?为什 么? ③将接口 ShapeAreaPeri 中定义的两个方法前加上 abstract 修饰符再编译,看对程序有影响 否?为什么? ④不用单独的实现类 Rectangle,直接在主类 InterfaceDemo 中实现那两个方法,如何修改程 序? ⑤将接口 ShapeAreaPeri 中定义的两个方法拆分定义成两个接口, 即每个接口只定义一个方法, 程序将如何修改? (4)根据功能提示写程序:设计一个实数类,一个复数类,都包含求模长(绝对值)、判断是否 为 0,求与它数和差积商的方法。将全部类都定义在同一个.java 文件中,部分代码已给出。 class RealNumber{ double realPart; public RealNumber(double realPart) { this.realPart=realPart; } public RealNumber(){ this(0); } double getReal(){ return realPart; } public double getModulus(){ //求模长,即绝对值 return Math.abs(realPart); } public boolean isZero(){ //调用 getModulus 判断是不是 0 并返回结果 } public RealNumber Add(RealNumber num) { double sumRealPart=this.realPart+num.getReal(); RealNumber sum=new RealNumber(sumRealPart); return sum; } //得到和的数值 //用和的数值构造实数类对象