普通類是乙個完善的功能類,可以直接產生例項化物件,並且在普通類中可以包含有構造方法、普通方法、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 抽象類中的方法要被使用...