简单学习Java抽象类要点及实例
使用抽象类应该注意的几个要点:
包含一个或者多个抽象方法的类必须被声明为抽象类.
将类声明为抽象类,不一定含有抽象方法.
通常认为,在抽象类中不应该包括具体方法,建议尽量将通用的域和方法放在超类中.
抽象类不可以被实例化.即不能创建这个类的对象
实例代码:
import java.util.*;
/**
* this program demonstrates abstract classes.
* @version 1.01 2004-02-21
* @author cay horstmann
*/
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;
}
在代码块:
for (person p : people)
system.out.println(p.getname() + ", " + p.getdescription());
中p.getdescription(),将引用具体子类的子类对象的方法.
不可以省略person类中的getdescription(),原因是编译器只允许调用在类中声明的方法.