1、什麼是抽象類ide
由abstract修飾的方法叫抽象方法;由abstract修飾的類叫抽象類。抽象的類沒法進行實例化,由於他不是具體存在的類,或者說這樣的類還不夠完善,不能直接使用new關鍵字調用其構造器生成該類的對象。咱們能夠使用abstract定義一個抽象類和抽象方法,示例代碼以下:函數
abstract class 類名this
{spa
abstract int 方法名(int x,int y);code
}對象
抽象的方法沒有方法體。須要注意的是在抽象類中既能夠有抽象方法,也能夠有普通方法,注意抽象方法是沒有方法體的(也就是方法後面是沒有大括號的)。凡是繼承這個抽象類的實體子類,都必需要實現這個抽象方法。blog
咱們總結一下抽象類的特色:繼承
(1)抽象類不能被實例化ip
(2)構造方法 和 static 方法不能是抽象的get
(3)父類的抽象方法每每在子類中實現
(4)抽象類能夠具備指向子類對象的對象引用
2、抽象類的例子
咱們先來看看要完成的實際例子:
一、定義抽象類員工Employee,
(a)保護字段:姓名name,性別gender,年齡age等基本屬性。
(b)定義抽象方法函數getsalary()表示領工資的操做
(c)定義普通函數whoami()輸出 :我是+姓名
(d)擁有(姓名name,性別gender)參數的構造函數
定義一個經理類Manager 派生於員工;
(a)除了有員工等基本屬性外,還有崗位級別 gree私有屬性
(b)經理領7000元工資,打印並輸出工資。
(c)重寫父類的whoami(),調用父類的whoami()方法,再輸出:我是一名經理。
定義一個會計類Accounting,派生於員工類;
(a)除了有員工等基本屬性外,還有會計等級 rating私有屬性
(b)會計領3000元工資,打印並輸出工資。
(c)重寫父類的whoami(),調用父類的whoami()方法,再輸出:我是一名會計。
/** * 定義類員工Employee, */ public abstract class Employee { protected String name; protected boolean gender; protected int age; public Employee(String name,boolean gender){ this.name=name; this.gender=gender; } /** * 表示領工資的操做 */ public abstract void getsalary(); public void whoami(){ System.out.println("我是"+name); } }
咱們新建一個經理類Manager,繼承Employee類,這時候Eclipse就提示咱們必需要重寫抽象方法getsalary。示例代碼以下:
/** * 經理類 */ public class Manager extends Employee{ private String gree; public Manager(String name,boolean gender){ super(name,gender); } //重寫父類的抽象方法 public void getsalary(){ System.out.println("經理領7000元工資"); } public void whoami(){ super.whoami();//顯示調用父類的方法 System.out.println("我是經理"); } }
接下來是會計類。和上面的經理類差很少了。
/** * 會計 */ public class Accounting extends Employee { private int rating; public Accounting(String name, boolean gender) { super(name, gender); } @Override public void getsalary() { System.out.println("會計發3000工資"); } public void whoami() { super.whoami();// 顯示調用父類的方法 System.out.println("我是會計"); } }