实验13-抽象类和接口教学教材
- 格式:doc
- 大小:17.00 KB
- 文档页数:3
实验-抽象类和接⼝学⽣实验报告课程:实验指导教师:系别:班级:实验⽇期:年⽉⽇实验地点:姓名:学号:⼀、实验名称:抽象类和接⼝实验概述:【实验⽬的及要求】1 ⼦类的继承性2⼦类对象的创建过程3成员变量的继承和隐藏4⽅法的继承和重写【实验环境】(使⽤的软件)Eclipse实验内容:【实验过程】(实验步骤、记录、数据、分析)实验内容:⼀、有⼀个abstract类,类名为Employee。
Employee的⼦类有YearWorker,MonthWorker 和WeekWorker。
YearWorker对象按年领取薪⽔,MonthWorker对象按⽉领取薪⽔,WeekWorker对象按周领取薪⽔。
Employee类有⼀个抽象⽅法:public abstract double earnings( );⼦类必须重写⽗类的earnings⽅法,给出各⾃领取报酬的具体⽅式。
有⼀个Company类,该类⽤employee数组作为成员,employee数组的成员可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。
程序能够输出Company对象⼀年需要⽀付的薪⽔总额。
程序模板按模板要求,将【代码1】~【代码4】替换为Java程序代码。
HardWork.javaabstract class Employee{public abstract double earnings( );}class YearWorker extends Employee{【代码1】// 重写earnings( )⽅法}class MonthWorker extends Employee{【代码2】// 重写earnings( )⽅法}class WeekWorker extends Employee{【代码3】// 重写earnings( )⽅法}class Company{Employee[ ] employee;double salaries=0;Company(Employee[ ] employee){this.employee=employee;}public double salariesPay( ){salaries=0;【代码4】// 计算salariesreturn salaries;}}public class HardWork{public static void main(String args[ ]){Employee[ ] employee=new Employee[20]; for(int i=0;i{if(i%3==0)employee[i]=new WeekWorker( );else if(i%3==1)employee[i]=new MonthWorker( );else if(i%3==2)employee[i]=new YearWorker( );}Company company=new Company(employee);System.out.println("公司年⼯资总额:"+company.salariesPay( ) );}}问题:1、⼦类YearWorker如果不重写⽗类的earnings( )⽅法,程序编译时会提⽰怎样的错误?⼆、有⼀个ComputeTotalSales接⼝,该接⼝中有⼀个⽅法:public double totalSalesByYear( );有三个实现该接⼝的类:Television、Computer和Mobile。
实验四抽象与接口一、实验目的1、理解抽象类与子类的关系,实现继承操作,构造类族;2、正确使用抽象类和子类实现多态操作;3、理解接口的意义,并实现行为的多态;4、理解了解抽象类、类以及接口三者的异同以及使用场合。
5、掌握UML基本用法和画法,并能根据题目描述画出类、接口、类之间的关系。
6、掌握基本的文件操作。
二、参考参考教材第13章;三、实验步骤1、阅读给出的题目描述;2、根据题目描述,画出类(类名,属性、方法)、类之间的关系3、先写出各部分的注释(常见的注释有:类或接口的功能注释;类的继承关系;类对接口的实现;类的属性注释和方法的功能注释;类方法的入口参数和返回值注释、选择结构和循环结构注释);4、书写代码,首先保证无语法错误、类的使用错误、类的继承错误、接口的实现错误;5、测试代码并修正代码中的可能的逻辑错误;6、在规定的最后期限前提交代码。
四、题目描述1、改写课本程序清单13-2中的Circle类,它继承自GeometricObject并实现Comparable 接口。
重写Object类中的equals方法,当两个Circle对象半径相等时,则认为这两个Circle 对象是相等的。
2、考虑农夫过河问题:一个农夫带着一匹狼、一只羊、一颗白菜要过河,河上只有一条船能够渡河,而且农夫每次最多只能带一个动物或物品过河。
当农夫不在的时候狼会吃羊,羊会吃白菜。
请设计程序,由用户选择角色过河,系统自动判断游戏的胜负:当出现有生物被吃掉的时候,游戏失败,所有角色都到了河的另一边,游戏成功。
要求在结构设计中必须使用抽象类和接口。
界面交互参考代码如下,其它的类由用户自行设计:import java.util.Scanner;public class Client {public static void menu(){System.out.println("==================Please choose operation============");System.out.println("\t==========1:Cross the river alone===========");System.out.println("\t==========2:Cross the river with wolf=========");System.out.println("\t==========3:Cross the river with sheep============");System.out.println("\t==========4:Cross the river with cabbage==========");System.out.println("\t==========0:Quit===============");System.out.println("===================================================");System.out.println("Input the number(0~4):");}public static void show(){/* 输出农夫、各种动物、物品的状态(生存、位置) */}public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);int choice = 0;boolean gamevoer=false,win=false;while(!gamevoer){menu();choice = input.nextInt();switch(choice){case 0: gamevoer=true;break;case 1:/* 农夫独自过河的处理 */break;case 2:/* 农夫带狼的处理 */break;case 3:/* 农夫带羊的处理 */break;case 4:/* 农夫带白菜的处理 */break;}}if(win) {System.out.println("game over: you win !");}else {System.out.println("game over: you lose !");}}}变化:游戏要求可能发生变更,比如农夫更换了动物、蔬菜或者其它物品,要带狐狸(吃兔子)、兔子(吃胡萝卜)、胡萝卜过河,请设计合适的类和接口以适应游戏的变更。
实验13 接口一、实验目的(1)熟悉接口的定义方法。
(2)了解Java语言实现多继承的途径。
二、实验内容第一题:学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的被管理和对于教师的责任管理在他们身上都有体现。
(1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。
其中,StudentInterface接口包括setFee( )方法和getFee( )方法,分别用于设置和获取学生的学费:TeacherInterface接口包括setPay( ) 方法和getPay( ) 方法,分别用于设置和获取老师的工资。
(2)定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。
(3)创建一个姓名为“zhangsan"的研究生,统计他的年收入和学费,如果收入减去学费不足2000元,则输出“provide a loan”(需要贷款)信息。
要求:(1)在Graduate中实现各个接口定义的抽象方法。
(2)对年学费和年收入进行统计,用收入减去学费,如果小于2000元则显示“providea loan”信息。
第二题:定义一个抽象类Bank,它包含有oneyearRate(定期利率)、oneyearNationaldebt(国债利率)和interestRate(活期利率)常数和count()方法及show()方法。
Count()方法用语对本息合计(存款本金+利息)进行计算,而show()方法用于对本息合计进行显示。
由于对不同的存款方式,利率是不同的,因此此程序分别定义多个子类实现对抽象类的继承,实现对利率的计算和显示。
注意:本程序定义了定期利率、活期利率、国债利率三种利率,按照一万元钱位存款单位进行统计,计算每种利率下存款一年后的本息合计。
第一单元抽象类和接口学习指导书一:学习目标二:重难点知识点1 、重难点1:抽象类和接口的概念、区别学习方法1.1 抽象类概念在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。
并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。
正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
举例:动物都有叫的方法,但是叫的方法不一样,但是动物吃的方法类似。
abstract class animal{abstract void shout();void eat(String food){System.out.println("我在吃"+food);}}class dog extends animal{void shout{//wang wang…}}class cat extends animal{void shout{// miao miao…}}1.2 接口概念一个接口表示:“所有实现了该特定接口的类看起来都像它”。
因此,任何使用某特定接口的代码都知道可能会调用该接口的那些方法,而且仅需知道这些。
因此,接口被用来建立类与类之间的“协议”。
Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
如果抽象类中所有的方法都是抽象方法,就可以使用Java提供的接口来表示。
实验13 接口
一、实验目的
(1)熟悉接口的定义方法。
(2)了解Java语言实现多继承的途径。
二、实验内容
第一题:
学校中有老师和学生两类人,而在职研究生既是老师又是学生,对学生的被管理和对于教师的责任管理在他们身上都有体现。
(1)设计两个信息管理接口StudentManageInterface和TeacherManageInterface。
其中,StudentInterface接口包括setFee( )方法和getFee( )方法,分别用于设置和获取学生的学费:TeacherInterface接口包括setPay( ) 方法和getPay( ) 方法,分别用于设置和获取老师的工资。
(2)定义一个研究生类Graduate,实现StudentInterface接口和TeacherInterface接口,它定义的成员变量有name(姓名)、sex(性别)、age(年龄)、fee(每学期学费)、pay(月工资)。
(3)创建一个姓名为“zhangsan"的研究生,统计他的年收入和学费,如果收入减去学
费不足2000元,则输出“provide a loan”(需要贷款)信息。
要求:
(1)在Graduate中实现各个接口定义的抽象方法。
(2)对年学费和年收入进行统计,用收入减去学费,如果小于2000元则显示“provide
a loan”信息。
第二题:
定义一个抽象类Bank,它包含有oneyearRate(定期利率)、oneyearNationaldebt(国债利率)和interestRate(活期利率)常数和count()方法及show()方法。
Count()方法用语对本息合计(存款本金+利息)进行计算,而show()方法用于对本息合计进行显示。
由于对不同的存款方式,利率是不同的,因此此程序分别定义多个子类实现对抽象类的继承,实现对利率的计算和显示。
注意:
本程序定义了定期利率、活期利率、国债利率三种利率,按照一万元钱位存款单位进行统计,计算每种利率下存款一年后的本息合计。
除了国债外,其他利率都要交纳个人所得税20%。
abstract class Bank {
protected static final float oneyearRate=0.0178f; //定期利率
protected static final float oneyearNationaldebt=0.0198f; //国债利率
protected static final float interestRate=0.0078f; //活期利率
abstract void count();
abstract void show();
}
class InterestRateCalcute extends Bank {
private float saving;
private double sum;
InterestRateCalcute(float i) { saving=i;count(); }
public void count(){
sum=saving+(saving*Bank.interestRate*0.8); //税后总金额}
public void show()
{
System.out.println(" With current interest rate, sum= "+sum);
}
}
class OneyearNationaldebtCalcute extends Bank {
private float saving;
private double sum;
OneyearNationaldebtCalcute(float i) { saving=i; count(); }
public void count()
{
sum=saving+(saving*Bank.oneyearNationaldebt);
}
public void show()
{
System.out.println(" With national debt rate, sum= "+sum);
}
}
class OneyearRateCalcute extends Bank {
private float saving; //原存款金额
private double sum; //1年后的总金额
OneyearRateCalcute(float i) { saving=i; count(); }
public void count() //实现count()方法
{
sum=saving+(saving*Bank.oneyearRate*0.8); //税后总金额
}
public void show() //实现show()方法
{
System.out.println(" With fixed rate, sum="+sum);
}
}
class Calculate {
public static void main(String args[])
{
int mon=10000;
OneyearRateCalcute rate=new OneyearRateCalcute(mon);
rate.show();
OneyearNationaldebtCalcute debt=new OneyearNationaldebtCalcute(mon);
debt.show();
InterestRateCalcute interest=new InterestRateCalcute(mon);
interest.show();
}
}。