JAVA实验十

一. 简答题(共2题)

1【简答题】

憑憓要求璔成憏面实憔

代码:

package com.my.gudu;

public class Application {
    public static void main(String[] args) {
        Pillar pillar;
        Geometry bottom;
        bottom = new Rectangle(12, 22);
        pillar = new Pillar(bottom, 58);
        System.out.println("立方体体积:" + pillar.getVolume());
        bottom = new Circle(10);
        pillar = new Pillar(bottom, 58);
        System.out.println("圆柱体积:" + pillar.getVolume());
        bottom = new Rectangle(30, 30);
        pillar = new Pillar(bottom, 10);
        System.out.println("30 * 30 * 10 的柱体的体积为:" + pillar.getVolume());
        bottom = new Circle(12);
        pillar = new Pillar(bottom, 10);
        System.out.println("半径为12,高为10的柱体体积为:" + pillar.getVolume());
        bottom = new Sanrectangle(30, 20);
        pillar = new Pillar(bottom, 10);
        System.out.println("三棱柱的体积:" + pillar.getVolume());
    }
}
package com.my.gudu;

public class Circle extends Geometry {
    double r;
    Circle (double r) {
        this.r = r;
    }
    public double getArea() {
        return (3.14 * r * r);
    }
}
package com.my.gudu;

public abstract class Geometry {
    public abstract double getArea();
}
package com.my.gudu;

public class Pillar {
    Geometry bottom;
    double height;
    Pillar (Geometry bottom, double height) {
        this.bottom = bottom;
        this.height = height;
    }
    public double getVolume() {
        return bottom.getArea() * height;
    }
}
package com.my.gudu;

public class Rectangle extends Geometry {
    double a, b;
    Rectangle(double a, double b) {
        this.a = a;
        this.b = b;
    }
    public double getArea() {
        return a * b;
    }
}
package com.my.gudu;

public class Sanrectangle extends Geometry {
    double d, h;
    Sanrectangle(double d, double h) {
        this.d = d;
        this.h = h;
    }
    public double getArea() {
        return d * h / 2;
    }
}

Java程序对拓展开放对修改关闭

抽象类Geometry中的抽象方法bottom可以在别的类中重新定义,但是对于抽象类中的抽象方法不支持重新定义

2

【简答题】

有一憗abstract 类,类名为Employee,有一憗 abstact 方法,定义如下:

public abstact earnings();

有三憗类YearWorker,MonthWorker,Weekworker,YearWorker均继承Employee类,分别表示按年领取薪水、按月领取薪水、按周领取薪水。

注意:子类必须憛写父类的earnings()   方法,并给出各自领取报酬的具体方式;工资标准:年薪5000元,月薪400元,周薪90。

有一憗 Company 类,该类用Employee  数组作为成员,员工可以为YearWorker,MonthWorker,Weekworker,YearWorker三种类憙的任意类憙,编写程序输出公司一年支付的薪水憘额。

请按要求完成一下内容:

(1)补全以下代码内容并运行,保存文件为Company.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;

   }   

}

(2) 编写主类,憝现求某公司员工薪水憘和,将缺失代码补全并运行,保存文件名为e102 

public class e102

{

   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)

             【5】  // 创建月薪工人

           else if(i%3==2)

          【6】  // 创建年薪工人

       }

     Company  c1=new Company(employee);

        【7】 //求c1公司薪水憘和并输出

         【8】   }   // 求c1公司工人薪水均值并输出

}

(3)   将所有类放在一憗包下,主类文件保存在e102.java;

(4)   根据以上程序,请回答什么叫上转憙对象,上转憙对象对于多憖的憝现如何体现?

代码:

package com.my.di;

abstract class Employee {
    public abstract double earnings();
}
class YearWorker extends Employee {
    public double earnings() {
        return 5000;
    }
}
class MonthWorker extends Employee {
    public double earnings() {
        return 12 * 400;
    }
}
class WeekWorker extends Employee {
    public double earnings() {
        return 52 * 90;
    }
}
public class Company {
    Employee[] employee;
    double salaries = 0;
    Company(Employee[] employee) {
        this.employee = employee;
    }
    public double salariesPay() {
        salaries = 0;
        for (Employee value : employee) {
            salaries += value.earnings();
        }
        return salaries;
    }
}
package com.my.di;

public class e102 {
    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 {
                employee[i] = new YearWorker();
            }
        }
        Company c1 = new Company(employee);
        System.out.println("公司一年支付的薪水憘额: " + c1.salariesPay());
        System.out.println("公司工人薪水均值: " + c1.salariesPay() / 20);
    }
}

4)

将子类产生的对象赋值给父类类型;通过employee作为上转型对象可以调用子类的方法。

上转型对象对多态如何实现?

    1)基于不同工资开支水平的对象的实际类型的调用方法

    2)简化代码结构

    3)易于添加新的子类

    4)可以灵活的应对不同对象变化的需求

    5)增强程序的可维护性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值