一、基礎概念 抽象事物,是若沒有具體的信息可以描述這個事物,這個事物可以稱為抽象事物。 抽象類,是不斷的向上抽取而來。抽取方法聲明而不確定具體的方法內容。由不同的子類來完成具體的方法內容。 (一)抽象類的特點: 1、抽象方法沒有方法體,必須由抽象關鍵字abstract來修飾。 1、抽象方法一定是存在 ...
一、基礎概念
抽象事物,是若沒有具體的信息可以描述這個事物,這個事物可以稱為抽象事物。
抽象類,是不斷的向上抽取而來。抽取方法聲明而不確定具體的方法內容。由不同的子類來完成具體的方法內容。
(一)抽象類的特點:
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 }
三、代碼執行