import java.util.Date;
import java.util.GregorianCalendar;
//本程序演示抽象类
public class PersonTest
{
public static void main(String [] args)
{
Person[] people=new Person[2];
//用 employee 和 student 填充这个数组
people[0]=new Employee("Right Wang",50000,2000,10,10);
people[1]=new Student("Little Finger","Computer Science");
//打印一下
for(Person p :people)
System.out.println(p.getName()+","+p.getDescription());
}
}
abstract class Person {
public Person(String n)
{
name=n;
}
public abstract String getDescription();
public String getName()
{
return name;
}
private String name;
}
class Employee extends Person
{
public Employee(String n,double s,int year,int month,int day)
{
//name=n;
super(n);
salary=s;
GregorianCalendar calendar=new GregorianCalendar(year,month-1,day);
hireDay=calendar.getTime();
}
/*public String getName()
{
return name;
}
*/
public double getSalary()
{
return salary;
}
public Date 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;
}
// private String name;
private double salary;
private Date hireDay;
}
class Student extends Person
{
/*
name
major
*/
public Student(String n,String m)
{
//传参数 n 给 超类的构造器
super(n);
major=m;
}
public String getDescription()
{
return "a student majoring in "+major;
}
private String major;
}
解析:该例子中 声明了 抽象类 Person ,把名字作为共有字段,放在了Person类中,
雇员类和学生类均继承于Person类,
构造函数中首先用super(n),完成了name字段的初始化。
getDescription()是抽象方法,抽象类中没有具体的实现
在雇员类和学生类中分别给予了实现。
运行结果:
Right Wang,an employee with a salary of $50000.00
Little Finger,a student majoring in Computer Science