一、什麼是抽象類
由abstract修飾的方法叫抽象方法;由abstract修飾的類叫抽象類。抽象的類無法進行實例化,因爲他不是具體存在的類,或者說這樣的類還不夠完善,不能直接使用new關鍵字調用其構造器生成該類的對象。我們可以使用abstract定義一個抽象類和抽象方法,示例代碼如下:
abstract class 類名
{
abstract int 方法名(int x,int y);
}
抽象的方法沒有方法體。需要注意的是在抽象類中既可以有抽象方法,也可以有普通方法,注意抽象方法是沒有方法體的(也就是方法後面是沒有大括號的)。凡是繼承這個抽象類的實體子類,都必須要實現這個抽象方法。
我們總結一下抽象類的特點:
(1)抽象類不能被實例化
(2)構造方法 和 static 方法不能是抽象的
(3)父類的抽象方法往往在子類中實現
(4)抽象類可以具有指向子類對象的對象引用
二、抽象類的例子
我們先來看看要完成的實際例子:
1、定義抽象類員工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("我是會計");
}
}