【实验要求】假设银行Bank已经有了按整年year计算利息的一般方法。ConstructionBank和BankOfXingtai类是Bank类的子类,两个子类都声明了自己的year变量并重写了自己的方法computerInterest( )。
【实验步骤】
Bank.java
public class Bank {
int savedMoney;
int year;
double interest;
double interestRate = 0.29;
public double computerInterest() {
interest=year*interestRate*savedMoney;
return interest;
}
public void setInterestRate(double rate) {
interestRate = rate;
}
}
ConstructionBank.java
public class ConstructionBank extends Bank {
double year;
public double computerInterest() {
super.year=(int)year;
double r = year-(int)year;
int day=(int)(r*1000);
double yearInterest = super.computerInterest(); //super调用隐藏的computerInterest()方法
double dayInterest = day*0.0001*savedMoney;
interest= yearInterest+dayInterest;
System.out.printf("%d元存在建设银行%d年零%d天的利息:%f元\n",
savedMoney,super.year,day,interest);
return interest;
}
}
BankOfXingtai.java
public class BankOfXingtai extends Bank {
double year;
public double computerInterest() {
super.year=(int)year;
double r = year-(int)year;
int day=(int)(r*1000);
double yearInterest = super.computerInterest();
// super调用隐藏的computerInterest()方法
double dayInterest = day*0.00012*savedMoney;
interest = yearInterest+dayInterest;
System.out.printf("%d元存在邢台银行%d年零%d天的利息:%f元\n",
savedMoney,super.year,day,interest);
return interest;
}
}
SaveMoney.java
public class SaveMoney {
public static void main(String args[]) {
int amount = 8000;
ConstructionBank bank1 = new ConstructionBank();
bank1.savedMoney = amount;
bank1.year = 8.236;
bank1.setInterestRate(0.035);
double interest1 = bank1.computerInterest();
BankOfXingtai bank2 = new BankOfXingtai();
bank2.savedMoney = amount;
bank2.year = 8.236;
bank2.setInterestRate(0.035);
double interest2 = bank2.computerInterest();
System.out.printf("两个银行利息相差%f元\n",interest2-interest1);
}
}
运行结果:
实验5.2 公司支出的总薪水
【实验要求】 编写一个abstract类,类名为Employee,Employee的子类有YearWorker、MonthWorker、WeekWorker。
【实验步骤】
CompanySalary.java
abstract class Employee {
public abstract double earnings();
}
class YearWorker extends Employee { // YearWorker对象按年领取薪水
public double earnings(){
return 12000;
} //重写earnings()方法,给出领取报酬的具体方式。
}
class MonthWorker extends Employee { // MonthWorker对象按月领取薪水
public double earnings(){
return 12*2300;
} //重写earnings()方法,给出领取报酬的具体方式。
}
class WeekWorker extends Employee { // WeekWorker对象按周领取薪水
public double earnings() { //重写earnings()方法,给出领取报酬的具体方式。
return 52*780;
}
}
class Company {
Employee[] employee;
double salaries = 0;
Company(Employee[] employee) {
this.employee = employee;
}
public double salariesPay() {
salaries = 0;
for(int i=0;i<employee.length;i++)
{
salaries=salaries+employee[i].earnings();
} //计算salaries。
return salaries;
}
}
public class CompanySalary {
public static void main(String args[]) {
Employee [] employee = new Employee[29]; //公司有29名雇员
for(int i=0;i<employee.length;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()+"元");
}
}
运行结果:
实验5.3 应用举例
【实验要求】 用类封装手机的基本属性和功能,要求手机可以使用任何公司提供的SIM卡(如移动公司或联通公司的SIM卡)。
【实验步骤】
SIM.java
public abstract class SIM {
public abstract void setNumber(String n);
public abstract String giveNumber();
public abstract String giveCorpName();
}
MobileTelephone.java
public class MobileTelephone {
SIM card;
public void useSIM(SIM card) { //参数card可以是抽象类SIM的任何一个子类对象的上转型对象
this.card=card;
}
public void showMess() {
System.out.println("手机号码是:"+card.giveNumber()); //调用子类重写的方法显示手机号码
System.out.println("使用的卡是:"+card.giveCorpName()+"提供的"); //显示该号码所属的公司
}
}
SIMOfChinaMobile.java
public class SIMOfChinaMobile extends SIM { //模拟移动公司提供的卡
String number;
public void setNumber(String n) {
number = n;
}
public String giveNumber() {
return number;
}
public String giveCorpName() {
return "中国移动";
}
}
SIMOfChinaUnicom.java
public class SIMOfChinaUnicom extends SIM { //模拟联通公司提供的卡
String number;
public void setNumber(String n) {
number = n;
}
public String giveNumber() {
return number;
}
public String giveCorpName() {
return "中国联通";
}
}
Application.java
public class Application {
public static void main(String args[]) {
MobileTelephone telephone = new MobileTelephone ();
SIM sim=new SIMOfChinaMobile();
sim.setNumber("13887656432");
telephone.useSIM(sim);
telephone.showMess();
sim=new SIMOfChinaUnicom();
sim.setNumber("13097656437");
telephone.useSIM(sim);
telephone.showMess();
}
}
运行结果: