為什么要使用抽象類?
抽象類是用來模型化那些父類無法確定全部實現(xiàn),而是通過子類提供其全部實現(xiàn)的對象的類。例如父類是幾何圖形,任何幾何圖形都有不同的面積計算方法。所以在父類中做個抽象的定義,在每一個子類中重寫該計算面積的方法。
abstract:抽象的??梢杂脕硇揎楊?、方法
1、abstract修飾類:抽象類
1)不可被實例化
2)抽象類有構(gòu)造器(凡是類都有構(gòu)造器)
3)抽象方法所在的類,一定是抽象類
4)抽象類可以沒有抽象方法
>當(dāng)我們設(shè)計一個類時,不需要創(chuàng)建此類的實例時,就可以考慮將其設(shè)置為抽象,由其子類來實現(xiàn)這個類的抽象。
2、abstract修飾方法:抽象方法
1)格式:沒有方法體,包括{ },如:public abstract void eat( );
2)抽象方法只保留方法的功能,而具體的執(zhí)行,交給繼承抽象類的子類,由子類重寫此抽象方法。
3)若子類繼承了抽象類,并重寫了所有的抽象方法,則此類是一個“實體類”,即可以實例化。
4)若子類繼承了抽象類,沒有重寫所有的抽象方法,意味著此類中仍有抽象方法,則此類必須聲明為抽象的!
-------------------------------
abstract ? ? 不能用來修飾屬性、構(gòu)造器、private、final、static
修飾屬性:不可以,abstract用來修飾屬性沒有意義,因為抽象類是需要在其繼承的子類中進行重寫的,而方法不管子類是否重寫,都不會覆蓋父類的屬性,所以沒必要抽象。所以子類便不能覆蓋(重寫)聲明為private的方法;
修飾構(gòu)造器:不可以,因為構(gòu)造器不能夠被重寫;
修飾private方法:不可以,因為private不能跨類訪問,所以哪怕在子類里面有父類的私有方法,也不被認(rèn)為是重寫;
修飾final:不行,定義成final本身就不能被重寫,而抽象又需要被重寫,所以矛盾;
修飾static:聲明成靜態(tài)的可以通過類來調(diào)用,但是抽象類里面沒有方法體,所以通過類來調(diào)用靜態(tài)的沒有什么意義。