我定义了一个Person类(一个抽象类),派生出两个子类--Employee和Student类
Person:
package absrtactClasses;
public abstract class Person {
public abstract String getDescription();//抽象类中的抽象方法
private String name;
public Person(String name){
this.name=name;
}
public String getName(){
return name;
}
}
Employee
package absrtactClasses;
import java.time.LocalDate;
public class Employee extends Person {
private double salary;
private LocalDate hireDay;
public Employee(String aname,double asalary,int year,int month,int day){
super(aname);
this.salary=asalary;
hireDay=LocalDate.of(year,month,day);
}
public double getSalary(){
return salary;
}
public LocalDate getHireDay(){
return hireDay;
}
public String getDescription(){
return String.format("an employee with a salary of $%.2f",salary);
}
public void raiseSalary(double byPercent){
double raise=salary*byPercent/100;
salary+=raise;
}
}
Student:
package absrtactClasses;
public class Student extends Person{
private String major;
public Student(String name,String major){
super(name);
this.major=major;
}
public String getDescription(){
return "a student major in "+major;
}
}
Finally:make it come true
package absrtactClasses;
public class PersonTest {
public static void main(String[] args){
Person[] people=new Person[2];
people[0]=new Employee("Harry Hacker",50000,1989,10,1);
people[1]=new Student("Maria Morris","Computer Science");
for (Person p:people) {
System.out.println(p.getName()+", "+p.getDescription());
}
}
}
那么最后就有人问了,可不可以在抽象类中不定义getDescription方法,如果这样的话,那就不能通过变量p来调用该方法了,这就要视实际情况了。