小白教程

 找回密码
 立即注册
小白教程 首页 系列教程 Java系列教程 查看内容

Java 抽象类

发布者: 小白教程

在 Java 面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。

由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。

父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。


抽象类

在Java语言中使用abstract class来定义抽象类。如下实例:

  1. /* 文件名 : Employee.java */
  2. public abstract class Employee
  3. {
  4. private String name;
  5. private String address;
  6. private int number;
  7. public Employee(String name, String address, int number)
  8. {
  9. System.out.println("Constructing an Employee");
  10. this.name = name;
  11. this.address = address;
  12. this.number = number;
  13. }
  14. public double computePay()
  15. {
  16. System.out.println("Inside Employee computePay");
  17. return 0.0;
  18. }
  19. public void mailCheck()
  20. {
  21. System.out.println("Mailing a check to " + this.name
  22. + " " + this.address);
  23. }
  24. public String toString()
  25. {
  26. return name + " " + address + " " + number;
  27. }
  28. public String getName()
  29. {
  30. return name;
  31. }
  32. public String getAddress()
  33. {
  34. return address;
  35. }
  36. public void setAddress(String newAddress)
  37. {
  38. address = newAddress;
  39. }
  40. public int getNumber()
  41. {
  42. return number;
  43. }
  44. }

注意到该Employee类没有什么不同,尽管该类是抽象类,但是它仍然有3个成员变量,7个成员方法和1个构造方法。 现在如果你尝试如下的例子:

  1. /* 文件名 : AbstractDemo.java */
  2. public class AbstractDemo
  3. {
  4. public static void main(String [] args)
  5. {
  6. /* 以下是不允许的,会引发错误 */
  7. Employee e = new Employee("George W.", "Houston, TX", 43);
  8. System.out.println("\n Call mailCheck using Employee reference--");
  9. e.mailCheck();
  10. }
  11. }

当你尝试编译AbstractDemo类时,会产生如下错误:

  1. Employee.java:46: Employee is abstract; cannot be instantiated
  2. Employee e = new Employee("George W.", "Houston, TX", 43);
  3. ^
  4. 1 error


123下一页
上一篇:Java 多态下一篇:Java 封装

Archiver|手机版|小黑屋|小白教程 ( 粤ICP备20019910号 )

GMT+8, 2024-9-20 06:39 , Processed in 0.019922 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

返回顶部