JAVA程序设计实验七

一. 填空题(共4题,100分)

1. (填空题)

protected成员的继承和使用

在上机实验6第二题的基础上修改源程序,具体要求如下:

Father类保持不变,即创建一个Father类,Father类放在名字叫ft的包中,Father类中一个protected void speak()方法,该方法输出"我是父亲"的消息。

然后从Father类继承产生Son类, Son类放在名字叫sn的包中,在Son类中定义一个protected void sing()方法,该方法输出"儿子正在唱歌"的消息。

最后定义一个主类Test,主类Test也放在ft包中,在主类Test中用Son类创建一个对象son,分别用三个源文件保存Father类, Son类和Test类。(注意:该程序在JDK中编译及执行)

回答以下问题:

(1) 在主类Test中通过对象son调用speak()方法是否能够成功_____________(回答是或者否)? 

(2) 在主类Test中通过对象son调用sing()方法是否能够成功_____________(回答是或者否)? 

(3) 如果需要在主类Test中通过对象son既可以调用speak()方法,又可以调用sing()方法,则需要将Son放在_____________包中。

(1) 是

(2) 否

(3) ft

2. (填空题)

子类的继承

编写一个Java应用程序,模拟中国人、美国人是人,北京人是中国人。

具体要求如下:

该程序有5个源文件:People.java,ChinaPeople.java,AmericanPeople.java,BeijingPeople.java,主类Example.java。请把【代码1】至【代码9】的语句补充完整。(注意:该程序在eclipse中编译及执行)

程序模板如下:

People.java

----------------------------------------

public class People {

   protected double weight,height;

   public void speakHello() {

      System.out.println("yayayaya");

   }  

   public void averageHeight() {

       height=173;

       System.out.println("average height:"+height);

   }

   public void averageWeight() {

      weight=70;

      System.out.println("average weight:"+weight);

   }

}

ChinaPeople.java

----------------------------------------

public class ChinaPeople extends People {

     public void speakHello() {   

        System.out.println("您好");

     }    

     public void averageHeight() { 

        height = 168.78;  

        System.out.println("中国人的平均身高:"+height+" 厘米");   

     }

   

      【代码1】      //重写public void averageWeight()方法,输出:"中国人的平均体重:65 公斤"

         weight=【代码2】;

         System.out.println("中国人的平均体重:"+weight+" 公斤");   

      }

     public void chinaGongfu() {

        System.out.println("坐如钟,站如松,睡如弓");

     }

}

AmericanPeople.java

----------------------------------------

public class AmericanPeople extends People {

   

public void speakHello() {  //重写public void speakHello()方法

      【代码3】 //输出"How do you do"

   }

   

         【代码4】 //重写public void averageHeight()方法,输出"American's average height:176 cm"

        height =  【代码5】    ;

        System.out.println("American's average height:"+height+" cm");   

     }

     public void averageWeight() { 

        weight = 75;  

        System.out.println("American's average weight:"+weight+" kg");   

     }

     public void americanBoxing() {

        System.out.println("直拳、钩拳、组合拳");

     }

}

BeijingPeople.java

----------------------------------------

public class BeijingPeople extends ChinaPeople {

     【代码6】 //重写public void averageHeight()方法,输出:"北京人的平均身高: 172.5厘米"

        height =  【代码7】 ;  

        System.out.println("北京人的平均身高:"+height+" 厘米");   

     }

   

  

     【代码8】 //重写public void averageWeight()方法,输出:"北京人的平均体重:70公斤"

         weight=  【代码9】 ;   

         System.out.println("北京人的平均体重:"+weight+" 公斤");   

      }

  

   public void beijingOpera() { 

       System.out.println("花脸、青衣、花旦和老生");

   }

}

Example.java

----------------------------------------

public class Example {

   public static void main(String args[]) {

      ChinaPeople chinaPeople=new ChinaPeople();

      AmericanPeople americanPeople=new AmericanPeople();

      BeijingPeople beijingPeople=new BeijingPeople();

      chinaPeople.speakHello();

      americanPeople.speakHello();

      beijingPeople.speakHello();

      chinaPeople.averageHeight();

      americanPeople.averageHeight();

      beijingPeople.averageHeight();

      chinaPeople.averageWeight();

      americanPeople.averageWeight();

      beijingPeople.averageWeight();

      chinaPeople.chinaGongfu();

      americanPeople.americanBoxing();

      beijingPeople.beijingOpera() ;

      beijingPeople.chinaGongfu();

   }  

}

回答以下问题:

(1)People 类中的

   public void speakHello() 

   public void averageHeight() 

   public void averageWeight()

三个方法的方法体中的语句是否可以省略_____________(回答是或者否)? 

(1) public void averageWeight() {

(2) 65

(3) System.out.println("How do you do");

(4) public void averageHeight() {

(5) 176

(6) public void averageHeight() {

(7) 172.5

(8) public void averageWeight() {

(9) 70

(10) 是

3. (填空题)

super关键字的用法

编写一个Java应用程序,模拟银行计算利息。

具体要求如下:

该程序有3个源文件:Bank.java,ConstructionBank.java,主类SaveMoney.java。请把【代码1】的语句补充完整。(注意:该程序在eclipse中编译及执行)

程序模板如下:

Bank.java

----------------------------------------

public class Bank {

   int savedMoney;

   int year;

   double interest;

   double interestRate = 0.029;

   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 = 【代码1】 //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;

   }

}

回答以下问题:

(1)根据提供的程序代码描述建设银行计算利息的方式:建设银行是按按年利率_________%,日利率_________%来计算利息。

(2)把SaveMoney.java中的【代码2】至【代码5】的语句补充完整,计算按年利率3.5%,8000元存在建设银行8年零236天的利息。

SaveMoney.java

----------------------------------------

public class SaveMoney {

   public static void main(String args[]) {

      

          ConstructionBank constructionBank=new ConstructionBank();

  【代码2】//调用方法设置年利率3.5%

  【代码3】 //设置存款为8000元

  【代码4】//设置存款时间为8年零236天

   【代码5】//计算利息

   }

}

(1) super.computerInterest();

(2) 2.9

(3) 0.01

(4) constructionBank.setInterestRate(0.035);

(5) constructionBank.savedMoney=8000;

(6) constructionBank.year=8.236;

(7)

constructionBank.computerInterest();

4. (填空题)

上转型对象的使用

编写一个Java应用程序,模拟计算一个公司一年应支付给雇员的薪水总额。

具体要求如下:

一个公司里有三种雇员,YearWorker(按年领取薪水,一年50000元),MonthWorker(按月领取薪水,每月2300元,每年薪水总额27600元),WeekWorker(按周领取薪水,每年薪水总额38000元),请把【代码1】至【代码4】的语句补充完整。(注意:该程序在eclipse中编译及执行)

该程序有1个源文件:CompanySalary.java。

程序模板如下:

CompanySalary.java

----------------------------------------

abstract class Employee {

   public abstract double earnings();

}

class YearWorker extends Employee {

public  double earnings() {

    【代码1】 //重写earnings()方法

}

}

class MonthWorker extends Employee {

   

public  double earnings() {

【代码2】 //重写earnings()方法

}

}

class WeekWorker extends Employee {

   

public  double earnings() {

    【代码3】 //重写earnings()方法。

}

}

class Company {

   Employee[] employee;

   double salaries=0;

   Company(Employee[] employee) {

      this.employee=employee;

   }

   public double salariesPay() {

       salaries=0;   

 for(Employee i:employee) {

      【代码4】 //计算一年应支付给雇员的薪水总额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()+"元");

   }

}

回答以下问题:

(1)子类YearWorker如果不重写earnings()方法,程序编译时是否会出现错误_____________(回答是或者否)? 

(2)通过分析该程序,在该公司中,拿年薪的职员有_____________个,拿月薪的职员有_____________个,拿周薪的职员有_____________个。

(1) return 50000;

(2) return 27600;

(3) return 38000;

(4) salaries+=i.earnings();

(5) 是

(6) 9

(7) 10

(8) 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值