抽象類學習

2021-09-25 13:25:07 字數 3627 閱讀 5050

普通類是乙個完善的功能類,可以直接產生例項化物件,並且在普通類中可以包含有構造方法、普通方法、static方法、常量和變數等內容。而抽象類是指在普通類的結構裡面增加抽象方法的組成部分。

那麼什麼叫抽象方法呢?在所有的普通方法上面都會有乙個「{}」,這個表示方法體,有方法體的方法一定可以被物件直接使用。而抽象方法,是指沒有方法體的方法,同時抽象方法還必須使用關鍵字abstract做修飾。

2.1 抽象類的使用

普通類可以直接產生例項化物件,並且在普通類中可以包含有構造方法、普通方法、static、成員變數、區域性變數;而所謂的抽象類就是在普通類的結構裡面增加抽象方法的組成部分。

***擁有抽象方法的類一定屬於抽象類,抽象類要使用abstract宣告。***
**示例

abstract class a

// 抽象方法沒有方法體的宣告,並且存在有abstract關鍵字,表示抽象方法

public abstract void print();

}

定義了抽象類,那麼可否直接使用這個抽象類。

直接產生物件??????????????????a是抽象類,無法例項化

當這個類可以例項化產生物件的時候意味著,這個物件可以使用呼叫類中的屬性和方法了,但是在抽象類裡面存在抽象方法,那麼這個抽象方法,這個抽象方法沒有方法體,即就不能呼叫,進而不能例項化抽象類。

抽象類的使用原則如下:

示例**:正確使用抽象類

abstract class a 

// 抽象方法沒有方法體的宣告,並且存在有abstract關鍵字,表示抽象方法

public abstract void print();

}// 乙個子類只能繼承乙個抽象類,單繼承

class b extends a

}public class testdemo

}

抽象類中定義靜態方法

在任何情況下,如果要執行類中的static方法的時候,都可以在沒有物件的時候直接呼叫,抽象類也是如此。

abstract class a

}class x extends a.b

}public class testdemo

}

總結:

1、抽象類中子類裡面會有明確的方法覆寫要求,而普通的方法沒有;

2、抽象類只比普通類多一些抽象方法,其他部分一樣;

3、普通類可以直接例項化,而抽象類必須經過向上轉型之後才可以得到例項化物件。

雖然乙個子類可以任意繼承乙個普通類,可是在實際開發中要求來講,普通類不要去繼承另外乙個普通類,繼承抽象類更好。

2.2 抽象類的相關限制

抽象類的組成和普通類的區別不大,但是由於有一點點定義上的區別,可能會有如下會被忽略的概念:

抽象類裡面由於會有一些屬性,那麼在抽象類中會存在構造方法,目的:為屬性初始化,並且子類物件例項化的時候依然滿足先執行父類構造,再執行子類構造的情況。

抽象類不能使用final定義:final定義的類不能有子類,抽象類必須有子類。

外部的抽象類不能使用static宣告,而內部的抽象類允許使用static宣告,使用static宣告的內部抽象類相當於乙個外部抽象類,繼承的時候使用 「外部類.內部類」 的形式表示類名稱。

示例**

abstract class a

}class x extends a.b

}public class testdemo

}

在任何情況下,如果要執行類中的static方法的時候,都可以在沒有物件的時候直接呼叫,抽象類也是如此。

abstract class a

}public class testdemo

}

抽象類在類庫中的例子

由於抽象類只需要乙個特定的系統子類操作,所以可以忽略掉外部子類。

示例**

abstract class a

} // 這個方法不受例項化物件的控制

public static a getinstance()

}public class test4

}

這樣的設計在系統類庫中比較常見。

例如,現在有三類事物:

**實現(行為)

abstract class action 

} // 因為現在不確定子類的是實現是,什麼樣的

public abstract void eat();

public abstract void sleep();

public abstract void work();

}

**實現:下面定義robot類

class robot extends action 

@override

public void sleep()

@override

public void work()

}

**實現:下面定義human類

class pig extends  action 

@override

public void sleep()

@override

public void work()

}

**實現:下面定義pig類

class pig extends action 

@override

public void sleep()

@override

public void work()

}

這三個類都屬於行為的子類,都可以通過行為來控制

public class testdemo

public static void fun(action act)

}

這些不同的型別最終都在行為上成功的進行了抽象,即:如果想使用行為操作,那麼就必須按照action()類的標準來實現子類。根據使用者不同的要求,去執行不同功能,呼叫不同的子類去實現不同的操作的具體實現方式。這種實現的模板就像按照要求標準填寫**一樣,要求什麼填寫什麼資訊。

1、如果要使用繼承的話,那麼就多使用抽系類

2、抽象類強制規定了子類的必須要做的事情,而且可以與抽象類的普通方法相配合使用;

3、抽象類的缺陷:單繼承。

抽象類 學習

抽象類 抽象 籠統,模糊,看不懂!不具體。特點 1,方法只有宣告沒有實現時,該方法就是抽象方法,需要被abstract修飾。抽象方法必須定義在抽象類中。該類必須也被abstract修飾。2,抽象類不可以被例項化。為什麼?因為呼叫抽象方法沒意義。3,抽象類必須有其子類覆蓋了所有的抽象方法後,該子類才可...

抽象類的學習

在c 中使用關鍵字 abstract 來定義抽象類和抽象方法。不能初始化的類被叫做抽象類,它們只提供部分實現,但是另乙個類可以繼承它並且能建立它們的例項。乙個包含乙個或多個純虛函式的類叫抽象類,抽象類不能被例項化 例如 abstract class shapesclass abstract publ...

Java學習 抽象類

當多個類中出現相同功能,但是功能主體不同 這是可以進行向上抽取,這時,只抽取功能定義,而不抽取功能主體 抽象 看不懂 抽象類的特點 1 抽象方法一定在抽象類中。2 抽象方法和抽象類都必須被abstract關鍵字修飾。3 抽象類不可以用new建立物件。以為呼叫抽象方法沒意義。4 抽象類中的方法要被使用...