欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

简单学习Java抽象类要点及实例

程序员文章站 2024-02-17 17:57:58
使用抽象类应该注意的几个要点: 包含一个或者多个抽象方法的类必须被声明为抽象类. 将类声明为抽象类,不一定含有抽象方法.通常认为,在抽象类中不应该包括具体方法,建议尽量将...

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

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

复制代码 代码如下:

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