Java实验--继承与多态
---恢复内容开始---
题目如下:
[实验任务一]:面积计算(设计型)。
1、 实验要求:
实验报告中要求包括程序设计思想、程序流程图、源代码、运行结果截图、编译错误分
析等内容。
2、实验内容:
(1)设计一个形状类 Shape,包含一个 getArea()方法,该方法不包含实际语句。
(2)在 Shape 类基础上设计圆形、矩形、三角形和梯形四个子类,要求根据实际形状重
写 getArea()方法。
(3)设计一个 TestShape 类,包含变量 area(存储总面积)、静态方法 countArea(Shape s),
该方法负责把参数中的形状面积加入到 area 中。在 main 函数中新建(2)中四种类型的对象
s1、s2、s3、s4,通过调用 countArea 方法把四个对象面积累加到 area 中,最后输出 area。
[实验任务二]:抽象类和接口的设计(设计型)。
1、 实验要求:
(1)能实现抽象类的继承关系;
(2)程序应包括各个被调用方法的执行结果的显示。
(3)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,
并给出解决办法。(附运行界面、源代码)。
2、 实验内容:
(1) 定义抽象类 Shape,抽象方法为 showArea(),求出面积并显示,定义矩形
类 Rectangle,正方形类 Square,圆类 Circle,根据各自的属性,用 showArea
方法求出各自的面积,在 main 方法中构造 3 个对象,调用 showArea 方法。
(2) 定义接口 DiagArea,其中包含方法 double getDiagonal()求对角线长, double
getArea()求面积,定义一个矩形类,实现此接口,并自行扩充成员变量和
方法,定义一个正方形类继承矩形类(如矩形有长 w 和宽 h,正方形有边
x,并有相应的构造函数,有一个方法中一次直接显示边长、面积和对角线
长),在另一类中的主方法里使用测试该类。
[实验任务三]:班级信息管理类设计(设计综合型实验)
1、 实验要求:
(1)能实现类的继承关系;
(2)用多种方法创建各个类的对象;
(3)程序应包括各个被调用方法的执行结果的显示。
(4)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,
并给出解决办法。(附运行界面、源代码)。
2、 实验内容:
(1)定义一个描述人的基本类,该类包括人的性别和出生日期两个数据成员,
以及设置和获取这些属性值的方法成员;
(2)再定义一个大学生类,使大学生类具有人的所有属性外,还具有姓名、学
号,大学入学成绩,籍贯属性以及设置和获取这些属性值的方法成员;编写完整的程
序,完成一个具有班级学生信息管理功能的程序。
[实验任务四]:按照题目要求设计并编写一个 JAVA 程序(综合设计型)
1、 实验要求:
(1) 能实现类的继承关系;
(2) 用多种方法创建各个类的对象;
(3)程序应包括各个被调用方法的执行结果的显示。
(4)写出实验报告。要求记录编译和执行 Java 程序当中的系统错误信息提示,并
给出解决办法。(附运行界面、源代码)。
2、实验内容:学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学
生的管理和对教师的管理在他们身上都有体现。
(1)设计两个信息管理接口 StudentManageInterface 和 TeacherManageInterface。其中,
StudentInterface 接口包括 setFee()方法和 getFee()方法,分别用于设置和获取学生的学费;
TeacherInterface 接口包括 setPay()方法和 getPay()方法,分别用于设置和获取教师的工资
(2)定义一个研究生类 Graduate,实现 StudentInterface 接口和 TeacherInterface 接口,它定
义的成员变量有 name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。
创建一个姓名为“zhangsan”的研究生,统计他的年收入和学费,如果收入减去学费不足
2000 元,则输出“provide a loan”(需要贷款)信息。
(3)提示:
①定义两个接口,分别在其中申明两个方法。
②定义主类 Graduate,实现这两个接口。
③ 定义主类的成员变量,和构造方法。
④ 给出四个接口方法的实现。
⑤ 给出一个计算是否需要贷款的方法,在里面统计年收入和学费,并输出
是否需要贷款的信息。
⑥ 写 main 方法。在其中创建一个姓名为“zhangsan”的研究生,调用计算是
否需要贷款的方法。
下面是实验结果:
设计思想:
通过java之间对类的继承的了解,及其对接口和抽象类的定义,使用,来完成本节课的实验练习,并且通过练习掌握其中的技巧,熟练运用这些定义,来完成本节课的实验
源程序:
实验一:面积计算
//MainTest.java
package shape; //洪鼎淇 信1705-3 20173627 public class MainTest { public static void main(String[] args) { // TODO 自动生成的方法存根 Circle s1=new Circle(3); Triangle s2=new Triangle(3,3); Juxing s3=new Juxing(3,3); Tixing s4=new Tixing(2,3,4); System.out.println(TestShape.countArea(s1)); System.out.println(TestShape.countArea(s2)); System.out.println(TestShape.countArea(s3)); System.out.println(TestShape.countArea(s4)); } }
//Shape.java
package shape; public abstract class Shape { public abstract double getArea(); } class Circle extends Shape { final double PI=3.1415926; private double x; public Circle(double bian) { x=bian; } public double getArea() { return x*x*PI; } } class Triangle extends Shape { private double width,height; public Triangle(double bian,double gao) { width=bian; height=gao; } public double getArea() { return width*height/2; } } class Juxing extends Shape { private double width,height; public Juxing(double bian,double gao) { width=bian; height=gao; } public double getArea() { return width*height; } } class Tixing extends Shape { private double width1,width2,height; public Tixing(double bian1,double bian2,double gao) { width1=bian1; width2=bian2; height=gao; } public double getArea() { return (width1+width2)*height/2; } } class TestShape { private static double area; TestShape() { area=0; } public static double countArea(Shape s) { area+=s.getArea(); return area; } }
实验二:抽象类和接口的设计
第一小题:
//DiagArea.java
package diagArea; //洪鼎淇 信1705-3 20173627 public interface DiagArea { double getDiagonal(); double getArea(); } class Rectangle implements DiagArea { double w,h; Rectangle(double bian,double gao) { w=bian; h=gao; } public double getDiagonal() { return Math.sqrt(Math.pow(w, 2)+Math.pow(h, 2)); } public double getArea() { return h*w; } } class Square extends Rectangle { double x; Square(double a) { super(a,a); } }
//TestDiag.java
package diagArea; public class TestDiag { public static void main(String args[]) { Rectangle s1=new Rectangle(3,4); Square s2=new Square(3); System.out.println("矩形的对角线长度为:"+s1.getDiagonal()); System.out.println("矩形的面积为:"+s1.getArea()); System.out.println("正方形的对角线长度为:"+s2.getDiagonal()); System.out.println("正方形的面积为:"+s2.getArea()); } }
第二小题:
//Shape.java
package shape1; //信1705-3 洪鼎淇 20173627 public abstract class Shape { public abstract void showArea(); } class Rectangle extends Shape { double width,height; Rectangle(double bian,double gao) { width=bian; height=gao; } public void showArea() { System.out.println("该矩形的面积为:"+(width*height)); } } class Square extends Shape { double width; Square(double bian) { width=bian; } public void showArea() { System.out.println("该正方形的面积为:"+(width*width)); } } class Circle extends Shape { private final double PI=3.1415926; private double width; Circle(double bian) { width=bian; } public void showArea() { System.out.println("该圆形的面积为:"+(width*width*PI)); } }
//TestShape.java
package shape1; public class TestShape { public static void main(String[] args) { // TODO 自动生成的方法存根 Rectangle s1=new Rectangle(3,4); s1.showArea(); Square s2=new Square(3); s2.showArea(); Circle s3=new Circle(3); s3.showArea(); } }
实验三:班级信息管理类
//BanjiManager.java
package banjiinfo; //洪鼎淇 信1705-3 20173627 import java.util.Iterator; import java.util.Scanner; import java.util.Vector; public class BanjiManager { Vector<Student> map=new Vector<Student>(); Iterator<Student> it; Scanner can; BanjiManager() { can=new Scanner(System.in); } public static void main(String args[]) { BanjiManager a=new BanjiManager(); a.run(); } public void run() { int k=1; while(k<=5&&k>=1) { k=showmenu(); } System.out.println("已退出系统"); can.close(); } public int showmenu() { System.out.println("大学生班级管理菜单"); System.out.println("1.添加学生"); System.out.println("2.删除学生"); System.out.println("3.修改学生"); System.out.println("4.查看所有学生"); System.out.println("5.查看学生信息"); System.out.println("其他数字.退出循环"); int num=can.nextInt(); if(num==1) { tianjia(); } else if(num==2) { shanchu(); } else if(num==3) { xiugai(); } else if(num==4) { show(); } else if(num==5) { chaxun(); } return num; } public void tianjia() { Student st=new Student(); String x=null,n=null,s=null,s1=null; double s2=0; System.out.println("请输入要添加的学号"); if(can.hasNext()) { x=can.next(); } if(canAdd(x)) { System.out.println("请输入姓名,性别,籍贯和大学入学成绩"); if(can.hasNext()) { n=can.next(); } if(can.hasNext()) { s=can.next(); } if(can.hasNext()) { s1=can.next(); } if(can.hasNext()) { s2=can.nextInt(); } st.setId(x); st.setName(n); st.setSex(s); st.setAddress(s1); st.setScore(s2); map.add(st); } else System.out.println("学号重复,请重新输入"); } public void shanchu() { String x=null; System.out.println("请输入要删除的学号"); if(can.hasNext()) { x=can.next(); } if(lookp(x)!=0) { map.removeElementAt(lookp(x)-1); } else System.out.println("查无此学号"); } public void chaxun() { Student st=new Student(); String x=null; System.out.println("请输入你想要查询的信息"); if(can.hasNext()) { x=can.next(); } it=map.iterator(); while(it.hasNext()) { st=it.next(); if(x.equals(st.getId())) { System.out.println("该学生信息如下所示(学号,姓名,性别,籍贯,大学入学成绩)"); System.out.println(st.getId()+" "+st.getName()+" "+st.getSex()+" "+st.getAddress()+" "+st.getScore()); return; } } System.out.println("没有找到要找到的信息"); } public void show() { Student st=new Student(); if(map.size()==0) { System.out.println("没有任何学生信息"); return; } it=map.iterator(); System.out.println("所有学生信息如下(学号,姓名,性别,籍贯,大学入学成绩):"); while(it.hasNext()) { st=it.next(); System.out.println(st.getId()+" "+st.getName()+" "+st.getSex()+" "+st.getAddress()+" "+st.getScore()); } } public void xiugai() { Student st=new Student(); String x=null,n=null,s=null,x1=null,s1=null; double s2=0; System.out.println("请输入要修改的学号"); if(can.hasNext()) { x=can.next(); } if(!canAdd(x)) { System.out.println("请输入要修改的学号,姓名,性别,籍贯和大学入学成绩"); if(can.hasNext()) { n=can.next(); } if(can.hasNext()) { s=can.next(); } if(can.hasNext()) { s1=can.next(); } if(can.hasNext()) { s2=can.nextInt(); } if(canChange(x1,lookp(x))) { st.setId(x); st.setName(n); st.setSex(s); st.setAddress(s1); st.setScore(s2); map.setElementAt(st, lookp(x)); } else System.out.println("学号重复,请重新输入"); } else System.out.println("查无此学号"); } //---------------------------------------------- public int lookp(String xuehao) { Student st=new Student(); int i=0; it=map.iterator(); while(it.hasNext()) { i++; st=it.next(); if(st.getId().equals(xuehao)) break; } return i; } public boolean canChange(String xuehao,int n) { Student st=new Student(); int i=0; it=map.iterator(); boolean ok=true; while(it.hasNext()) { i++; st=it.next(); if(i==n) continue; if(st.getId().equals(xuehao)) { ok=false; break; } } return ok; } public boolean canAdd(String xuehao) { Student st=new Student(); it=map.iterator(); boolean ok=true; while(it.hasNext()) { st=it.next(); if(st.getId().equals(xuehao)) { ok=false; break; } } return ok; } }
//People.java
package banjiinfo; public class People { String name,sex; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } }
//Student.java
package banjiinfo; public class Student extends People { String name,id,address; Student() { super(); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public double getScore() { return score; } public void setScore(double score) { this.score = score; } double score; }
实验四:按照题目要求设计一个java程序
//Graduate.java
package graduate; //洪鼎淇 信1705-3 20173627 public class Graduate implements StudentManagerInterface, TeacherManagerInterface { public static void main(String args[]) { Graduate zhanshan=new Graduate(); zhanshan.setFee(2200); zhanshan.setPay(3400); if(zhanshan.getPay()-zhanshan.getFee()<2000) { System.out.println("provide a loan"); } } @Override public void setPay(double a) { // TODO 自动生成的方法存根 pay=a; } @Override public double getPay() { // TODO 自动生成的方法存根 return 0; } @Override public void setFee(double a) { // TODO 自动生成的方法存根 fee=a; } @Override public double getFee() { // TODO 自动生成的方法存根 return 0; } double fee=0; double pay=0; }
//StudentManagerInterface.java
package graduate; public interface StudentManagerInterface { void setFee(double a); double getFee(); }
//TeacherManagerInterface.java
package graduate; public interface TeacherManagerInterface { void setPay(double a); double getPay(); }
实验结果截图:
实验一:面积计算
下面是实验的结果截图
程序输入的信息如下所示
实验二:抽象类与接口类的设计
第一小题:
第一小题输入的信息如下所示:
第二小题:
第二小题输入的信息如下所示:
实验三:班级信息管理类设计
实验的截图如下所示
实验四:按照题目要求设计并编写一个Java程序
按照题目于要求设计
其中输入的数据如下所示:
实验总结:
通过本次课的练习,掌握了类之间继承的基本用法,并且还能够粗略领悟到在哪一方面能够使用到,例如同一方法的在不同类的相同定义,这里大概就是面对对象的思想的体现,总的来说这是一节学习到很多知识的实验课。并且,在抽象类和接口的设计上有了初步的认识,了解到了其中的语法,这在我之前的java学习中尚且没有学习过,领悟颇深的一次实验。
---恢复内容结束---