99 lines
1.8 KiB
Java
99 lines
1.8 KiB
Java
/**
|
|
@version 1.01 2004-02-21
|
|
@author Cay Horstmann
|
|
*/
|
|
|
|
import java.text.*;
|
|
import java.util.*;
|
|
|
|
public class PersonTest
|
|
{
|
|
public static void main(String[] args)
|
|
{
|
|
Person[] people = new Person[2];
|
|
|
|
// fill the people array with Student and Employee objects
|
|
people[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
|
|
people[1] = new Student("Maria Morris", "computer science");
|
|
|
|
// print out names and descriptions of all Person objects
|
|
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)
|
|
{
|
|
super(n);
|
|
salary = s;
|
|
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
|
|
hireDay = calendar.getTime();
|
|
}
|
|
|
|
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 double salary;
|
|
private Date hireDay;
|
|
}
|
|
|
|
|
|
class Student extends Person
|
|
{
|
|
/**
|
|
@param n the student's name
|
|
@param m the student's major
|
|
*/
|
|
public Student(String n, String m)
|
|
{
|
|
// pass n to superclass constructor
|
|
super(n);
|
|
major = m;
|
|
}
|
|
|
|
public String getDescription()
|
|
{
|
|
return "a student majoring in " + major;
|
|
}
|
|
|
|
private String major;
|
|
}
|