一、某公司的雇员分为以下若干类
1.父类Employee
这是所有员工总的父类,
属性:员工的姓名,员工的生日月份。
方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
创建Employee
public abstract class Employee {
private String name;//员工姓名
private int month;//员工的生日月份
//结算工资
public abstract void getSalary(int month);
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", month=" + month +
'}';
}
public Employee() {
}
public Employee(String name, int month) {
this.name = name;
this.month = month;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
}
2.父类为 Employee的子类SalariedEmployee
SalariedEmployee:
Employee的子类,拿固定工资的员工。
属性:月薪
创建SalariedEmployee
/**
* 拿固定工资的员工
* 月薪结算工资的员工
*/
public class SalariedEmployee extends Employee{
private double monthlySalary;//月薪
@Override
public void getSalary(int month) {
//根据参数月份判断员工是否生日
if(this.getMonth() == month){
System.out.println(this.getName()+"本月生日,奖励100"+"本月工资为:"+(monthlySalary+100));
}else {
System.out.println(this.getName()+"本月工资为:"+monthlySalary);
}
}
public SalariedEmployee() {
}
public SalariedEmployee(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
public double getMonthlySalary() {
return monthlySalary;
}
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
}
3.父类为 Employee的子类HourlyEmployee
HourlyEmployee:
Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。
属性:每小时的工资、每月工作的小时数
创建 HourlyEmployee
/**
* 小时结算的工资
* 每月工作超出160小时的部分按照1.5倍工资发放
*/
public class HourlyEmployee extends Employee{
private double wage;//每小时的工资
private double hour;//每月工作的小时数
public void settlement(){
};
@Override
public void getSalary(int month) {
if(hour>160){
if(month == getMonth()){
System.out.println(this.getName()+"本月工作时长大于160小时且本月生日,奖励100"+"本月工资为:"+(160*this.wage+(this.hour-160)*(1.5*wage)+100));
}else {
System.out.println(this.getName()+"本月工作时长大于160小时,本月工资为:"+(160*this.wage+(this.hour-160)*(1.5*wage)));
}
}else {
System.out.println(this.getName()+"本月工资为:"+this.hour*wage);
}
}
public double getWage() {
return wage;
}
public void setWage(double wage) {
this.wage = wage;
}
public double getHour() {
return hour;
}
public void setHour(double hour) {
this.hour = hour;
}
}
4.父类为 Employee的子类SalesEmployee
SalesEmployee:
Employee的子类,销售人员,工资由月销售额和提成率决定。
属性:月销售额、提成率
创建SalesEmployee
/**
*
* 销售人员,工资由月销售额和提成率决定
*/
public class SalesEmployee extends Employee{
private double monthlysales;//月销售额
private double commissionrate;//提成率
@Override
public void getSalary(int month) {
if(this.getMonth()==month){
System.out.println(this.getName()+"本月生日,奖励100"+"本月工资为:"+(monthlysales*commissionrate+100));
}else {
System.out.println(this.getName()+"本月工资为:"+(monthlysales*commissionrate));
}
}
public double getMonthlysales() {
return monthlysales;
}
public void setMonthlysales(double monthlysales) {
this.monthlysales = monthlysales;
}
public double getCommissionrate() {
return commissionrate;
}
public void setCommissionrate(double commissionrate) {
this.commissionrate = commissionrate;
}
}
5.父类为SalesEmployee的子类BasePlusSalesEmployee
BasePlusSalesEmployee:
SalesEmployee的子类,有固定底薪的销售人员,工资由底薪加上销售提成部分。
属性:底薪。
创建BasePlusSalesEmployee
/**
*
* 有固定底薪的销售人员,工资由底薪加上销售提成部分
*/
public class BasePlusSalesEmployee extends SalesEmployee {
private double basicsalary;//底薪
@Override
public void getSalary(int month) {
if(this.getMonth()==month){
System.out.println(this.getName()+"本月生日,奖励100"+"本月工资为:"+(basicsalary+getMonthlysales()*getCommissionrate()+100));
}else {
System.out.println(this.getName()+"本月工资为:"+(basicsalary+getMonthlysales()*getCommissionrate()));
}
}
public double getBasicsalary() {
return basicsalary;
}
public void setBasicsalary(double basicsalary) {
this.basicsalary = basicsalary;
}
}
6.创建测试类
首先创建四种员工然后将四种类型的员工放在一个Employee数组里
通过for循环遍历,在控制台输入月份来计算当前月份四种员工的工资
/**
* 测试类
* 测试四种员工在某月的工资
*
*/
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
/**
* 拿固定工资的员工
* 月薪结算工资的员工
*/
SalariedEmployee se1 = new SalariedEmployee();
se1.setName("张三");
//员工的出生月份
se1.setMonth(7);
//给员工设置月薪
se1.setMonthlySalary(5000);
/**
* 小时结算的工资
* 每月工作超出160小时的部分按照1.5倍工资发放
*/
HourlyEmployee he1 = new HourlyEmployee();
he1.setName("李四");
//员工的出生月份
he1.setMonth(10);
//给员工设置每小时的工资
he1.setWage(12);
///给员工设置每月工作的小时数
he1.setHour(240);
/**
*
* 销售人员,工资由月销售额和提成率决定
*/
SalesEmployee se2 = new SalesEmployee();
se2.setName("王五");
//员工的出生月份
se2.setMonth(12);
//给员工设置月销售额
se2.setMonthlysales(1000000);
///给员工设置提成率
se2.setCommissionrate(0.2);
/**
*
* 有固定底薪的销售人员,工资由底薪加上销售提成部分
*/
BasePlusSalesEmployee be1 = new BasePlusSalesEmployee();
be1.setName("赵六");
//员工的出生月份
be1.setMonth(7);
//给员工设置月销售额
be1.setMonthlysales(1000000);
//给员工设置提成率
be1.setCommissionrate(0.2);
//设置底薪
be1.setBasicsalary(3000);
//将四种员工放入Employee数组中
Employee[] employee = new Employee[]{se1,he1,se2,be1};
System.out.println("请输入月份:");
int month = new Scanner(System.in).nextInt();
for (int i = 0; i < employee.length; i++) {
//输入月份计算输入月份四位员工的工资
employee[i].getSalary(month);
}
}
}
运行效果:
- 没有员工生日
请输入月份:
9
张三本月工资为:5000.0
李四本月工作时长大于160小时,本月工资为:3360.0
王五本月工资为:200000.0
赵六本月工资为:203000.0Process finished with exit code 0
- 当李四生日时
请输入月份:
10
张三本月工资为:5000.0
李四本月工作时长大于160小时且本月生日,奖励100本月工资为:3460.0
王五本月工资为:200000.0
赵六本月工资为:203000.0Process finished with exit code 0
二、 形状类(接口)Shape求周长和求面积
形状类(接口)的子类(实现类):
Shape接口
public interface Shape {
//求周长
public double C();
//求面积
public double S();
}
Rect(矩形)
/**
* 矩形类
*/
public class Rect implements Shape{
private double longg;//长
private double width;//宽
/**
* 矩形周长
* @return
*/
@Override
public double C() {
return (longg+width)*2;
}
/**
* 矩形面积
* @return
*/
@Override
public double S() {
return longg*width;
}
public Rect() {
}
public Rect(double longg, double width) {
this.longg = longg;
this.width = width;
}
public double getLongg() {
return longg;
}
public void setLongg(double longg) {
this.longg = longg;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
}
Circle(圆形)
public class Circle implements Shape{
private double r;//半径
private double PI=3.14;
/**
* 圆形周长
*/
@Override
public double C() {
return (2*PI*r);
}
/**
* 圆形面积
* @return
*/
@Override
public double S() {
return PI*Math.pow(r,2);
}
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public Circle() {
}
public Circle(double r) {
this.r = r;
}
}
Rect类的子类:
Square(正方形)
public class Square extends Rect{
@Override
public double S() {
return super.S();
}
@Override
public double C() {
return super.C();
}
}
测试类
不同的子类会有不同的计算周长和面积的方法
创建三个不同的形状对象,放在Shape类型的数组里,分别打印出每个对象的周长和面积
public class Test {
public static void main(String[] args) {
//正方形
Square s1 = new Square();
s1.setLongg(5);
s1.setWidth(5);
//矩形
Rect rect = new Rect();
rect.setLongg(7);
rect.setWidth(3);
//圆形
Circle circle = new Circle();
circle.setR(5);
//创建Shape数组将创建的对象放入其中
Shape[] shape = new Shape[]{s1,rect,circle};
for (int i = 0; i < shape.length; i++) {
System.out.println("周长"+shape[i].C());
System.out.println("面积"+shape[i].S());
System.out.println();
}
}
}
运行效果:
周长20.0
面积25.0周长20.0
面积21.0周长31.400000000000002
面积78.5
Process finished with exit code 0