天天看點

Java知識27 抽象類【多測師】

一、在Java中一起都是對象,所有的對象都是通過類來描繪的,但不是所有的類都是用來描繪對象的,一個類中沒有足夠的資訊描繪一個具體的對象就是抽象類
特點:
1.抽象類不能執行個體化對象
2.抽象類的其他功能,成員變量,成員方法,構造方法的通路方式和普通類一樣
3.抽象不能執行個體化對象,是以類必須被繼承才能使用
4.父類包含子類集合的常見方法,由于父類本身是抽象的,是以這些方法不能使用
5.Java中抽象類表示是繼承關系,一個類隻能繼承一個抽象類,一個類可以實作多個接口

二、抽象類定義方法:abstract class
public abstract class Employee{ 
    private String name; 
    private String address; 
    private int number; 
    public Employee(String name, String address, int number) 
{ 
        System.out.println("Constructing an Employee"); 
        this.name = name; 
        this.address = address; 
        this.number = number; 
    }
}
執行個體化這個對象會報錯,是以隻能通過繼承的方法來繼承抽象類
/* 以下是不允許的,會引發錯誤 */ 
Employee e = new Employee("George W.", "Houston, TX", 43);

三、繼承抽象類
public class Salary extends Employee{ 
    private double salary; //Annual salary 
    public Salary(String name, String address, int number, double salary) { 
        super(name, address, number); 
        setSalary(salary); }}
1.可以通過一般的方法繼承抽象類Employee
2.不能執行個體化一個Employee類的對象,但可以執行個體化一個Salary類對象,該對象可以從Employee類繼承7個成員方法,且通過這個方法可以設定或擷取三個成員變量

四、抽象方法
設計一個類,該類包含一個特别的成員方法,該方法的具體實作由它的子類确定,那麼你可以在父類中聲明該方法為抽象方法。
abstract關鍵字可以用來聲明抽象方法,抽象方法隻包含一個方法名,沒有方法體
抽象方法沒有定義,方法名後面直接+分号,沒有大括号
public abstract class Employee  
{
   private String name;
   private String address;
   private int number;
  
   public abstract double computePay();//抽象方法隻有方法名沒有方法體
                                      //方法名後面加分号,沒有花括号
   //其餘代碼
}

五、聲明抽象方法造成的結果:
1.包含抽象方法,該類為抽象類,但抽象類不一定包含抽象方法
2.任何子類必須重寫父類的抽象方法,或者聲明自身為抽象類
3.繼承抽象方法的子類必須重寫該方法
4.抽象類不能被執行個體化
5.抽象類中的抽象方法隻是聲明,不包含方法體,不給出方法的具體實作和具體功能
6.構造方法,類方法(用static修飾的方法)不能聲明為抽象方法
7.抽象類的子類必須給出抽象類中抽象方法的具體實作,除非該子類也是抽象類