- Could you have omitted the
abstract
method altogether from thePerson
superclass, simply defining thegetDescription
methods in theEmployee
andStudent
subclasses? - If you want did that, then you wouldn’t have been able to invoke the
getDescription
method on the variablep
. - The compiler ensures that you invoke only methods that are declared in the class.
absractClasses/PersonTest.java
package abstractClasses;
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());
}
}
abstractClasses/Employee.java
// Enables transform audio video link to to html5 embed audio video tags.
package abstractClasses;
public abstract class Person
{
public abstract String getDescription();
private String name;
public Person(String n)
{
name = n;
}
public String getName()
{
return name;
}
}
abstractClasses/Employee.java
// Enables transform audio video link to to html5 embed audio video tags.
package abstractClasses;
import java.util.Date;
import java.util.GregorianCalendar;
public class Employee extends Person{
private double salary;
private Date hireDay;
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;
}
}
abstractClasses/Student.java
package abstractClasses;
public class Student extends Person{
private String major;
/**
* @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;
}
}
Abstract
methods are an important concept in the Java programming language.
You will encounter them most commonly inside interfaces.
Todo:The use of extends
and super
is explained separately.