实验五 子类与继承(2)

【实验要求】假设银行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();

   }

}

运行结果:

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值