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学习中尚且没有学习过,领悟颇深的一次实验。
---恢复内容结束---
Java实验--继承与多态的更多相关文章
- Java的继承和多态
看了博客园里面的一个文章,关于java的继承和多态: class A ...{ public String show(D obj)...{ return ("A and D"); ...
- Java 实验案例(多态)
实验任务 任务一:图形面积周长计算小程序 任务二:饲养员喂养动物程序 实验内容: 任务一: 图形面积周长计算 任务目的: 掌握多态的含义及应用场合 掌握上转型对象和多态的实现 掌握abstract关键 ...
- Java面向对象㈡ -- 继承与多态
Java的继承是通过extends和implement来实现的,Java不支持多继承,但是Java支持多层继承以及多实现(接口).Java继承有一个关键字super是用来指向父类.Java继承衍生出覆 ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- Java基础——继承和多态
面向对象的编程允许从已经存在的类中定义新的类,这称为继承. 面向过程的范式重点在于方法的设计,而面向对象的范式将数据和方法结合在对象中.面向对象范式的软件设计着重于对象以及对象上的操作.面向对象的方法 ...
- java面向对象--继承与多态
可以为一个变异单元中的每个类创建一个main方法,只有命令行所调用的那个类的main方法才会被调用,这样方便进行单元测试.继承时,一般将所有的数据成员都指定为private,将所有的方法指定为publ ...
- Java中继承与多态
Java类的继承继承的语法结构: [修饰符列表] class 子类名 extends 父类名{ 类体; }子类就是当前这个类,父类就是我们要复用的那个类java中只支持单继承 ...
- 原来你是这样的JAVA[03]-继承、多态、抽象类
一.继承 Java中的继承使用关键字extends ,跟C#的语法略有差别. 1.子类构造器 java会自动在子类的构造器中插入对父类构造器的调用,也就是说在子类可以访问父类之前已经完成了父类的初始化 ...
随机推荐
- HDU 5416 CRB and Tree (技巧)
题意:给一棵n个节点的树(无向边),有q个询问,每个询问有一个值s,问有多少点对(u,v)的xor和为s? 注意:(u,v)和(v,u)只算一次.而且u=v也是合法的. 思路:任意点对之间的路径肯定经 ...
- PHP一句话后门过狗姿势万千之理论篇
写在前面: 过狗相关的资料网上也是有很多,所以在我接下来的文章中,可能观点或者举例可能会与网上部分雷同,或者表述不够全面. 但是我只能说,我所传达给大家的信息,是我目前所掌握或者了解的,不能保证所有人 ...
- uva1228 Integer Transmission
这道题思维很灵活.也有点套路的意思. 首先规定0,1分别按照原来的顺序接收,只是01换位.这样简化了思维.(否则并不会有更优结果它.,比较好想)最大值和最小值可以贪心得到.那么接下来就是给定一个整数P ...
- uva1609 Foul Play
思维 创造条件使一轮比赛之后仍满足1号打败至少一半,并剩下至少一个t' 紫书上的思路很清晰阶段1,3保证黑色至少消灭1半 #include<cstdio> #include<vect ...
- node节点的部署
master点赋予用户权限 [root@mast-1 k8s]# kubectl create clusterrolebinding kubelet-bootstrap \ > --cluste ...
- JavaScript 非常重要的几个概念
JavaScript是一门比较复杂的语言.如果你是一名JavaScript开发人员,不管处于什么样的水平,都有必要了解JavaScript的基本概念.小编最近的工作涉及到JavaScript,于是本文 ...
- Tunnelier使用说明
Tunnelier与MyEnTunnel类似,但是功能更加强大.MyEnTunnel小巧易用,如何使用MyEnTunnel可以参考 MyEnTunnel使用说明 这里列下Tunnelier的优点: 1 ...
- HTTP请求头的具体含意
为你详细解读HTTP请求头的具体含意 | 浏览:5763 | 更新:2012-03-16 16:41 当我们打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后网站服务器根据HTTP请求头 ...
- SG定理与SG函数
一个蒟蒻来口胡$SG$函数与$SG$定理. 要是发现有不对之处望指教. 首先我们来了解一下$Nim$游戏. $Nim$游戏是公平组合游戏的一种,意思是当前可行操作仅依赖于当前局势. 而经典$Nim$游 ...
- mysql在线开启或禁用GTID模式
在线开启步骤: 1.要求: (1)必须是5.7.6版本以上的mysql (2)GTID状态为OFF 2.开启步骤: (1):SET GLOBAL ENFORCE_GTID_CONSISTENCY = ...