当前位置:课程学习>>第四章 面向对象基础>>实践活动
同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?
实践主题1:上转型对象
实践目标1:掌握上转型对象的使用。上转型即把子类创建的对象的引用放到一个父类的对象中时,得到该对象的一个上转型对象,那么这个上转型对象在调用方法时就可能具有多种形态,不同对象的上转型对象调用同一方法可能产生不同的行为。
实践任务1:按模板要求,将[代码]处替换为Java程序代码
实践要求1:有一个abstract类,类名为Employee,其子类有YearWorker、MonthWorker、WeekWorker。YearWorker对象按年领取薪水,MonthWorker按月领取薪水、WeekWorker按周领取薪水。Employee类有一个abstract方法:public abstract earnings();子类必须重写父类的earnings()方法,给出各自领取报酬的具体方式。
有一个Company类,该类用Employee数组作为成员,Employee数组的单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。程序能输出Company对象一年需要支付的薪水总额。
HardWork.java
abstract 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] //计算salaries
return salaries;
}
}
public class HardWork {
public static void main(String[] args) {
Employee[] employee=new Employee[20];
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());
}
}
这个实践主要是加强对上转型对象的掌握。程序考核的是输出语句的使用。参考代码如下:
public double earnings(){ //[代码1]重写earnings()方法
double earnings=80000.0;
return earnings;
}
public double earnings(){ // [代码2]重写earnings()方法
double earnings=4000.0;
return earnings;
}
public double earnings(){ //[代码3]重写earnings()方法
double earnings=500.0;
return earnings;
}
salaries=salaries+employee[i].earnings();//[代码4]
实践主题2:接口回调
实践目标2:掌握接口回调技术
实践任务2:按模板要求,将[代码]处替换为Java程序代码
实践任务2:有一个ComputeTotalSales接口,该接口中有一个方法:public double totalSalesByYear()
有三个实现该接口的类Television、Computer和Mobile,这三个类通过实现接口ComputeTotalSales,给出自己的年销售额。
有一个Shop类,该类用ComputeTotalSales数组作为成员,ComputeTotalSales数组的单元可以存放Television对象的引用、Computer对象的引用或Mobile对象的引用。程序能输出Shop对象的年销售额。
HappySale.java
interface ComputeTotalSales {
public double totalSalesByYear();
}
class Television implements ComputeTotalSales {
[代码1] //实现totalSalesByYear()方法
}
class Computer implements ComputeTotalSales {
[代码2] //实现totalSalesByYear()方法
}
class Mobile implements ComputeTotalSales {
[代码3] //实现totalSalesByYear()方法
}
class Shop {
ComputeTotalSales[] goods;
double totalSales=0;
Shop(ComputeTotalSales[] goods) {
this.goods=goods;
}
public double giveTotalSales() {
totalSales=0;
[代码4] //计算totalSales
return totalSales;
}
}
public class HappySale {
public static void main(String[] args) {
ComputeTotalSales[] goods=new ComputeTotalSales[50];
for (int i=0;i<goods.length;i++) {
if(i%3==0)
goods[i]=new Television();
if(i%3==1)
goods[i]=new Computer();
if(i%3==2)
goods[i]=new Mobile();
}
Shop shop=new Shop(goods);
System.out.println("商店年销售额: "+shop.giveTotalSales());
}
}
这个实践主要是加强对接口回调的掌握。程序考核的是输出语句的使用。参考代码如下:
public double totalSalesByYear(){
return 30000.0;
} //[代码1]实现totalSalesByYear()方法
public double totalSalesByYear(){
return 40000.0;
} //[代码2]实现totalSalesByYear()方法
public double totalSalesByYear(){
return 50000.0;
} //[代码3]实现totalSalesByYear()方法
totalSales=totalSales+goods[i].totalSalesByYear();// [代码4]
实践主题3:三角形类的封装
实践目标3:使用类来封装对象的属性和功能
实践要求3:编写一个Java应用程序,该程序中有1个类:Trangle,用来刻画“三角形”,具体要求如下:Trangle类具有类型为double的三个边属性,Trangle类具有返回周长、面积以及修改三个边的功能。另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个数能否构成一个三角形。
这个实践主要是加强对类封装的掌握。参考代码如下:
//AreaAndLength.java
class Trangle //三角形类
{
double sideA,sideB,sideC;
boolean isTrangle;
public Trangle(double a,double b,double c) //构造方法
{
sideA=a;
sideB=b;
sideC=c;
if( (a+b>c) && (a+c>b) && (b+c>a)) //构成三角形的条件
isTrangle =true;
else
isTrangle =false;
}
double getLength() //计算length的值
{
if(boo)
return (sideA+sideB+sideC);
else
{
System.out.println("不是一个三角形,不能计算周长");
return 0;
}
}
public double getArea() //计算面积
{
if (sTrangle)
{
double p=(sideA+sideB+sideC)/2.0;
return Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
}
else
{
System.out.println("不是一个三角形,不能计算面积");
return 0;
}
}
public void setABC(double a,double b,double c)//设置三角形的边
{
sideA=a;
sideB=b;
sideC=c;
if( (a+b>c) && (a+c>b) && (b+c>a) )
isTrangle =true;
else
isTrangle =false;
}
}
public class AreaAndLength
{
public static void main(String[] args)
{
double length,area;
Trangle trangle=new Trangle(3,4,5); //创建对象trangle
length=trangle.getLength(); //计算周长
System.out.println("三角形的周长:"+length);
area=trangle.getArea(); //计算面积
System.out.println("三角形的面积:"+area);
trangle.setABC(10,20,5);
area=trangle.getArea(); //计算面积
System.out.println("三角形的面积:"+area);
length=trangle.getLength(); //计算周长
System.out.println("三角形的周长:"+length);
}
}