一、抽象类的应用练习
一抽象类的练习:招聘员工(小时工与按照工资发放)
- 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;
}
}
- 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;
}
}
- 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方法先把那三个属性获取到。
}
}
- 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的对象,不可进行比较。");
}
}
}