抽象类的应用练习、

一、抽象类的应用练习

一抽象类的练习:招聘员工(小时工与按照工资发放)

  1. Employee类:
package exercise;



public abstract class Employee {

    private String name;

    private int number;

    private MyDate birthday;

   

    public Employee(String name, int number, MyDate birthday) {//抽象类是有构造器的

        super();

        this.name = name;

        this.number = number;

        this.birthday = birthday;

    }



    public abstract double earnings(); //抽象类的抽象方法,继承他的子类必须重写



    @Override

    public String toString() {

        return "Employee [name=" + name + ", number=" + number + ", birthday=" + birthday.toDateString() + "]";

    }



    public String getName() {

        return name;

    }



    public void setName(String name) {

        this.name = name;

    }



    public int getNumber() {

        return number;

    }



    public void setNumber(int number) {

        this.number = number;

    }



    public MyDate getBirthday() {

        return birthday;

    }



    public void setBirthday(MyDate birthday) {

        this.birthday = birthday;

    }

}

 

  1. MyDate类:
package exercise;



public class MyDate {

    private int year;

    private int month;

    private int day;

    public MyDate(int year, int month, int day) {

        super();

        this.year = year;

        this.month = month;

        this.day = day;

    }

    public String toDateString() {

        return year+"年"+month+"月"+day+"日";

    }

    public int getYear() {

        return year;

    }

    public void setYear(int year) {

        this.year = year;

    }

    public int getMonth() {

        return month;

    }

    public void setMonth(int month) {

        this.month = month;

    }

    public int getDay() {

        return day;

    }

    public void setDay(int day) {

        this.day = day;

    }

}
  1. SalariedEmployee
package exercise;



public class SalariedEmployee extends Employee {

    private double monthlySalary;// 月工资



    public double earnings() {// 因为继承的父类是抽象类,要重写其中的抽象方法。

        return monthlySalary;

    }



    public SalariedEmployee(String name, int number, MyDate birthday, double monthlySalary) {

        super(name, number, birthday);// 利用super调用抽象父类Employee的name、number、birthday。

        this.monthlySalary = monthlySalary;

    }



    @Override

    public String toString() {

        return "SalariedEmployee [" + super.toString() + "monthlySalary=" + monthlySalary + "]";// 调用父类的toString方法先把那三个属性获取到。

    }



}

 

  1. PayrollSystem类:


 

package exercise;



import java.util.Scanner;



public class PayrollSystem {

    public static void main(String[] args) {

        Employee[] emps=new Employee[2];

        //造两个名额工人(一个是长期工,一个是小时工)

        emps[0]=new SalariedEmployee("李雷",1001,new MyDate(1998, 9, 8),8800);

        emps[1]=new HourlyEmployee("王明",1002,new MyDate(2000,2, 27),100,8);

       

        Scanner s=new Scanner(System.in);

        System.out.println("请输入本月的月份:");

        int month=s.nextInt();

       

        for(int i=0;i<emps.length;i++) {

            //判断当前的月份与员工的生日月份是否相等

            if(month==emps[i].getBirthday().getMonth()) {

                System.out.println("加工资,加1000");

            }

            System.out.println(emps[i]);

        }

    }

}

5、TestCircle类:

package exercise;



public class TestCircle {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

                ComparableCircle c1=new ComparableCircle(2.3);

                ComparableCircle c2=new ComparableCircle(2.1);

                ComparableCircle c3=new ComparableCircle(2.3);



                int i1=c1.compareTo(c2);

                int i2=c1.compareTo(c3);

                int i3=c2.compareTo(c1);

                System.out.println(i1);//1

                System.out.println(i2);//0

                System.out.println(i3);//-1

                int i4=c1.compareTo(new String());

    }

       

   

}

interface CompareObject{

    int compareTo(Object o);

}

class Circle{

    private double radius;



   

    public Circle() {

        super();

    }



    public Circle(double radius) {

        super();

        this.radius = radius;

    }



    public double getRadius() {

        return radius;

    }



    public void setRadius(double radius) {

        this.radius = radius;

    }

}

class ComparableCircle extends Circle implements CompareObject{

    public ComparableCircle(double radius) {

        super(radius);

    }

    @Override

    public int compareTo(Object o) {

        if(this==o) {

            return 0;

        }else if(o instanceof ComparableCircle) {

            ComparableCircle c=(ComparableCircle)o;

            if(this.getRadius() > c.getRadius()) {

                return 1;

            }else if(this.getRadius() < c.getRadius()) {

                return -1;

            }else {

                return 0;

            }

        }else {

            throw new RuntimeException("传入的非ComparableCircle的对象,不可进行比较。");

        }

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_39044046/article/details/94708142
今日推荐