一、基础概念
抽象事物,是若没有具体的信息可以描述这个事物,这个事物可以称为抽象事物。
抽象类,是不断的向上抽取而来。抽取方法声明而不确定具体的方法内容。由不同的子类来完成具体的方法内容。
(一)抽象类的特点:
1、抽象方法没有方法体,必须由抽象关键字abstract来修饰。
1、抽象方法一定是存在于抽象类中,必须有抽象关键字abstract来修饰。
2、抽象类不能实例化。不能用new关键字创建对象。
3、子类必须覆盖抽象类中的所有抽象方法后,才可以实例化。否则该子类还是一个抽象类。
(二)抽象类中可以有构造函数:
因为抽象类不能创建对象,所有抽象类中的构造函数是不能给抽象类的对象进行实例化。但是抽象类可以有子类,抽象类的构造函数可以子类的对象进行初始化。所有抽象类中可以有构造函数。
(三)抽象类和一般类的区别:
抽象类可以描述事物的属性和行为。描述事物的信息不具体,可以定义抽象方法,但不能进行实例化。
一般类可以描述事物的属性和行为。事物的信息是具体的,不可以定义抽象方法,但可以进行实例化。
(四)抽象类一定是个父类:
因为必须需要子类覆盖抽象方法后,才可以实例化。才能使用这些方法。
(五)抽象类中是可以不定义抽象方法的:
这时的抽象类的功能,仅仅是让该类不能创建对象。
(六)抽象关键字abstract和那些关键字不能共存的:
关键字final、关键字private、关键字static。
二、实例代码
要求:公司中有程序员和项目经理。程序员有姓名、工号和薪水。并为公司进行工作。项目经理除了有姓名、工号和薪水外还有奖金。也为公司进行工作。对给出的需求进行数据建模。
分析:
程序员:属性:姓名、工号、薪水
行为:工作
项目经理:属性:姓名、工号、薪水、奖金
行为:工作
两者不存在所属关系,但是有共性内容,可以向上抽取为雇员。
雇员:属性:姓名、工号、薪水
行为:工作
1 //抽象类 Employee
2 abstract class Employee
3 {
4 private String name;
5 private int id;
6 private double pay;
7
8 public void setName(String name)
9 {
10 this.name = name;
11 }
12 public void setId(int id)
13 {
14 this.id = id;
15 }
16 public void setPay(double pay)
17 {
18 this.pay = pay;
19 }
20
21 public String getName()
22 {
23 return name;
24 }
25 public int getId()
26 {
27 return id;
28 }
29 public double getPay()
30 {
31 return pay;
32 }
33
34 Employee(String name,int id,double pay)
35 {
36 this.name = name;
37 this.id = id;
38 this.pay = pay;
39 }
40
41 //抽象方法 work
42 public abstract void work();
43 }
44
45 //描述程序员继承抽象类 Employee
46 class Programmer extends Employee
47 {
48 Programmer(String name,int id,double pay)
49 {
50 super(name,id,pay);
51 }
52 public void work()
53 {
54 System.out.println("name: "+this.getName()+" id: " +this.getId()+" pay: "+this.getPay() );
55 System.out.println("Programmer work ......");
56 }
57
58 }
59
60
61 //描述项目经理继承抽象类 Employee
62 class Manager extends Employee
63
64 {
65 private double bonus;
66
67 Manager(String name,int id,double pay,double bonus)
68 {
69 super(name,id,pay);
70 this.bonus = bonus;
71 }
72 public void work()
73 {
74 System.out.println("name: "+this.getName()+" id: " +this.getId()+" pay: "+this.getPay()+" bonus: " +bonus);
75 System.out.println("Manager work ......");
76 }
77 }
78
79 class AbstractDemo
80 {
81 public static void main(String[] args)
82 {
83 Programmer a = new Programmer("xiaoming",001,5000.00);
84 a.work();
85 Manager m = new Manager("xiaohong",010,8000.00,600.00);
86 m.work();
87 }
88 }
三、代码执行