1、实验9 JAVA面向对象实训报告实验九 JAVA 面向对象编程(5) 【实验目的】1.掌握JAVA语言接口的定义和使用。2.掌握JAVA语言抽象类的声明和使用。3.掌握JAVA语言抽象方法的概念和使用。4.掌握类成员变量及方法的使用。【预习内容】1. JAVA 抽象类的定义格式;2.JAVA 接口定义的语法格式;3.this 和 super关键词的功能和区别;4.JAVA构造方法的重载;5.JAVA多态的概念,及重载和覆盖的区别;【实验内容及步骤】1上机验证题1.阅读下面的程序,在理解的基础上并运行程序:(1)定义一个Point(点)类,然后创建Point(点)类的子类Line(线)。最后通过
2、构建一个 测试类 来输出线段的长度。程序中通过super(a,b)调用父类Point 的构造方法为父类的x 和y 赋值。在子类Line 的setLine方法中,因为参数名和成员变量名相同,为给成员变量赋值,使用this 引用,告诉编译器是为当前类的成员变量赋值。在length 和toString 方法中使用父类成员变量时,使用super 引用,告诉编译器使用的是父类的成员变量。(2)使用this、super和super()的程序文件LX7_4.java,源代码如下。class Point protected int x, y;Point(int a, int b) setPoint(a, b)
3、;public void setPoint(int a, int b) x=a;y=b;class Line extends Point protected int x, y;Line(int a, int b) super(a, b);setLine(a, b);public void setLine(int a, int b) this.x +=a;this.y+=b;public double length() int x1=super.x, y1=super.y, x2=this.x, y2=this.y;return Math.sqrt(x2-x1) * (x2-x1) + (y2-
4、y1) * (y2-y1);public String toString() return 直线端点: + super.x + , + super.y + +x + , + y + 直线长度: + this.length();public class LX3_10public static void main(String args) Line line=new Line(50, 50);System.out.println(n+line.toString();(3)编译并运行程序,结果如图所示。图7.3程序运行过程(4) 在以上程序的基础上, 请修改程序实现: (1)从键盘输入 2个点的x,
5、y坐标,求出该两点间的直线距离。 (2)从键盘输入 1个初始点的x,y坐标,和与终点间的x,y偏移值,求出终点的x,y坐标,以及该两点间的直线距离。程序清单import java.util.*;public class Point private int x;private int y; public double getX() return x; public int setX(int x) this.x = x;return x*x; public int getY() return y; public int setY(int y) this.y = y; return y*y; pub
6、lic Point()public Point(int x,int y) this.setX(x); this.setY(y); public static void add(int a,int b) double c=Math.sqrt(a+b); System.out.println(两点间的距离为:+c); public static void main(String args) Scanner sc=new Scanner(System.in); Point p=new Point(); System.out.println(请输入x1的横坐标); int i1=sc.nextInt(
7、); System.out.println(请输入x1的纵坐标); int j1=sc.nextInt(); System.out.println(请输入x2的横坐标); int i2=sc.nextInt(); System.out.println(请输入x2的纵坐标);int j2=sc.nextInt(); add(p.setX(i1-i2), p.setY(j1-j2); 程序运行过程2. 编程定义的一个图形接口 Shape, 内含2个抽象方法 getArea()和toString().定义一个矩形抽象类Rectangle类实现Shape接口的2个抽象方法,并添加自己的一个抽象方法ge
8、tGirth().再定义一个具体类Square,继承于Rectangle类,并编写一个测试类,测试Shape, Rectangle类以及Square类的性能。 程序清单interface Shape int getArea(); String toString();abstract class Rectangle implements Shape public int getArea() return 0; public String toString() return rect; abstract int getGirth();class Square extends Rectangle i
9、nt size; Square(int s) size = s; public int getArea() return size * size; int getGirth() return 4 * size; public class Test public static void main(String args) Rectangle s = new Square(2); System.out.println(s.getArea(); System.out.println(s.getGirth(); System.out.println(s); 程序运行结果(截图)3. 验证如下程序,并
10、写出运行结果(截图): /* PolytechnicStudent.java:定义了polytechnicstudent 包,包含了两个接口、一个抽象类和一个具体类 */package student.polytechnicstudent;interface People /定义父接口 String getName(); /定义一个抽象方法 interface Student extends People /定义子接口 String getNumber(); /新增一个抽象方法 abstract class CollegeStudent implements Student / 定义专科学生类
11、(抽象类) static final int LENGTHOFSCHOOLING =3; /定义学制(类常量) String strName; /新增学生姓名 String strNumber; /新增学号 String strSpecialty; /新增学号 public String getName() /实现了People 接口中的getName方法 return strName; public String getNumber() /实现了Student 接口中的getNumber方法 return strNumber; public String toString() /新增 方法
12、return 学生姓名= + strName + , 学号= + strNumber; public abstract String getSpecialty(); /新增抽象方法getSpecialty()public class PolytechnicStudent extends CollegeStudent /定义高职学生类(具体类) private String strPracticeCompany = ;/新增实习单位 public PolytechnicStudent(String name, String number)/构造方法 strName = name; /属性strN
13、ame继承于父类 strNumber = number; /属性strNumber继承于父类 public PolytechnicStudent( String name, String number, String specialty) /重载构造方法 this(name,number);/利用this关键字调用本类的另一构造方法(2个参数) strSpecialty = specialty; public String getSpecialty() /新增方法getSpecialty() return strSpecialty; public void setSpecialty(Strin
14、g specialty) /新增方法setSpecialty(.) strSpecialty = specialty; public String toString()/覆盖父类的toString()方法 return super.toString() + strSpecialty+ , 学制= + LENGTHOFSCHOOLING + 年n; /利用super关键字调用父类中的同名方法toString()本程序自定义了一个包: student.polytechnicstudent,该包中的所有类和接口被存放在当前文件夹的student子文件夹下的polytechnicstudent文件夹中
15、,该程序编译的命令行如下:javac -d . PolytechnicStudent.java其中参数 d . 表示把编译生成的包文件放在当前的目录下。本例中当前目录为:C:Program FilesJavajdk1.5.0bin ,因此本程序编译结果如图4-30所示:图4-30 包文件编译对于已经创建的包的应用如下:import student.polytechnicstudent.PolytechnicStudent;/导入自定义包public class PolytechnicStudentTest public static void main(String args) Polytec
16、hnicStudent tom = new PolytechnicStudent(Tom, 20020888); /系统调用含2参数的构造方法 tom.setSpecialty(软件技术); System.out.println(tom.toString(); /调用子类PolytechnicStudent中的toString()方法 PolytechnicStudent jack = new PolytechnicStudent(Jack, 20020999,电子商务); /系统调用含3参数的构造方法 System.out.println(jack.toString(); /调用子类Poly
17、technicStudent中的toString()方法 / CollegeStudent linda = new CollegeStudent(); / error,抽象类 只能定义其句柄,不能定义其对象 Object linda = new PolytechnicStudent(Linda, 20020222,国际贸易); /Object 类是所有类的父类 /父类句柄可以关联一个子类(具体类)对象,发生多态现象 /linda.setSpecialty(国际贸易); /error,父类句柄虽然关联了一个子类对象,但不允许访问子类所特有的方法 System.out.println(linda.
18、toString(); /利用一个父类句柄访问一个父子类都具有的覆盖方法, /实际上调用的是子类中的那个覆盖方法,此处发生多态现象 PolytechnicStudentTest.java程序运行的结果如下图所示【自己运行截图】: 图4-31 类与对象综合应用4) 编写一个自动售货机的程序,要求编写一个自动售货机的程序。该程序应具如下功能:有二级菜单,一级菜单商品类的选择,二级是具体商品的选择,顾客先选择商品类,然后选择具体商品,输入购买数量,自动售货机根据选择的商品和输入的数量,计算并显示所选商品总金额。示例输出: 【提示】问题解答提示:1、 程序功能具有二级菜单,因此需要使用swith/ca
19、se的嵌套结构实现;2、 第一层嵌套实现对商品类型的选择,根据用户选择的序号进行匹配;3、 在进入所属商品类型后,顾客选择该类型下的具体商品,并提示输入购买数量;4、 第二层嵌套实现对具体商品的选择,根据用户选择的序号进行匹配,同时根据购买数量计算总额;5、 最后输出顾客本次购买的总金额;import java.io.*; import java.util.Scanner;public class sale public static void main(String args) Scanner scan=new Scanner(System.in); int a,b,c,d,e; Syste
20、m.out.println(请选择:1.日用品 2.文具.食品); a=scan.nextInt(); switch(a) case 1: System.out.println(请选择:1.牙刷(3.5元/支)2.牙膏(6.2元/支)3.肥皂(2元/块)4.毛巾(8.6元/条); b=scan.nextInt(); System.out.println(请输入数量:); c=scan.nextInt(); switch(b) case 1: System.out.println(总计:+3.5*c); break; case 2: System.out.println(总计:+6.2*c);
21、break; case 3: System.out.println(总计:+2*c); break; case 4: System.out.println(总计:+8.6*c); break; break; case 2: System.out.println(请选择:1.笔(1元/支)2.本子(3元/本).橡皮(1元/块)); b=scan.nextInt(); System.out.println(请输入数量:); d=scan.nextInt(); switch(b) case 1: System.out.println(总计:+1*d); break; case 2: System.o
22、ut.println(总计:+3*d); break; case 3: System.out.println(总计:+1*d); break; break; case 3: System.out.println(请选择:1.牛奶(2元/瓶)2.蛋糕(5元/块).面包(1元/个)); b=scan.nextInt(); System.out.println(请输入数量:); e=scan.nextInt(); switch(b) case 1: System.out.println(总计:+2*e); break; case 2: System.out.println(总计:+5*e); break; case 3: System.out.println(总计:+1*e); break; break;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1