Java抽象类简单学习

来源:互联网 发布:淘宝攻略卖家 编辑:程序博客网 时间:2024/06/07 02:14

使用抽象类应该注意的几个要点:

  1. 包含一个或者多个抽象方法的类必须被声明为抽象类. 
  2. 将类声明为抽象类,不一定含有抽象方法.
  3. 通常认为,在抽象类中不应该包括具体方法,建议尽量将通用的域和方法放在超类中.
  4. 抽象类不可以被实例化.即不能创建这个类的对象 
实例代码:

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(),原因是编译器只允许调用在类中声明的方法. 

0 0
原创粉丝点击