Java面向對象之抽象類abstract 入門實例


一、基礎概念

  抽象事物,是若沒有具體的信息可以描述這個事物,這個事物可以稱為抽象事物。

  抽象類,是不斷的向上抽取而來。抽取方法聲明而不確定具體的方法內容。由不同的子類來完成具體的方法內容。

  (一)抽象類的特點:

    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 }

三、代碼執行

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM