在以後所有的進行的專案開發之中,不要出現乙個類去繼承乙個已經實現好的類,而只能繼承抽象類和介面。
物件多型性的核心本質在於方法的重寫,那麼如果現在子類沒有去進行指定方法的重寫,這樣的操作就有些不合要求的。所以如果要對子類的方法進行一些強制的要求就必須採用抽象類來解決。
抽象類只是在普通類的基礎上擴充了一些抽象方法而已。所謂的額抽象方法指的是只宣告而未實現(沒有方法體)的方法,所有的抽象方法要求使用abstract
關鍵字定義,並且抽象方法所在的類也一定要使用abstract
定義類,表示抽象類。
範例:定義乙個抽象類
abstract
class
a//抽象方法不含方法體
public
abstract
void
fun(
)}
抽象類就是比普通方法多一些抽象方法。
抽象類中包含抽象方法,抽象方法最大的區別在於其沒有方法體,即:不知道具體的實現,而如果此時產生了例項化物件,則意味著可以呼叫類中的所有操作。
抽象類的使用原則:
抽象的物件可以通過物件多型性利用子類為其實例化。
範例:使用抽象類
abstract
class
a//抽象方法不含方法體
public
abstract
void
fun();
}//乙個子類只能夠通過extends來繼承抽象類,所以依然單繼承
class
bextendsa}
public
class
testdemo
}
還有一種使用形式:
abstract
class
apublic
static a getinstance()
}return
newb()
;}//抽象方法不含方法體
public
abstract
void
fun();
}public
class
testdemo
}
使用的是內部類,對於封裝性很有好處。
抽象類只是比普通類多了一些抽象方法的定義而已,所以在抽象類之中依然允許提供有構造方法,並且子類也會遵守子類物件的例項化流程。例項化子類物件前一定要先去呼叫父類的構造方法。
範例:在抽象類中定義構造方法
abstract
class
person
public
abstract string getinfo()
;}class
student
extends
person
public string getinfo()
}public
class
testdemo
}
如果父類中沒有無參構造,那麼子類必須通過super()
呼叫父類的構造方法。
其實抽象類中存在構造方法,畢竟抽象類中還有屬性,所有的屬性一定要在物件例項化的時候進行空間的開闢,物件例項化必須要使用構造方法。
關於物件例項化的核心:
abstract
class
apublic
abstract
void
print()
;}class
bextends
apublic
void
print()
}public
class
testdemo
}
結論:如果構造方法沒有執行,那麼物件
中的屬性一定都是其對應資料型別的預設值。
抽象類中可以不定義任何的抽象方法,但是此時抽象類依然無法直接例項化。
抽象類一定不能使用final進行宣告,因為使用final定義的類不能夠有子類,而抽象類必須有子類。抽象方法不能使用private定義,抽象方法一定要被子類重寫。
抽象類也分為內部抽象類和外部抽象類,內部抽象類中可以使用static定義,描述為外部抽象類。
範例:內部抽象類
abstract
classa}
class
xextends
aclass
yextendsb;
}}
如果外部抽象類使用了static就是語法錯誤,可以內部抽象類上允許使用static。
abstract
classa}
class
xextends
a.b}
抽象類最大的特點在於強制規定了子類的實現結構,除了這樣一特點,抽象類還可以起到模版的作用,下面做乙個簡單地分析:
那麼現在假設有乙個按鈕控制(方法),一旦傳入了某些指令後就可以進行相應的處理。
範例:描述抽象行為
範例:定義各個行為的子類
class
human
extends
action
public
void
sleep()
public
void
work()
}class
pigextends
action
public
void
sleep()
public
void
work()
}class
robot
extends
action
public
void
sleep()
public
void
work()
}
範例:呼叫各自行為的操作
public
class
testdemo
public
static
void
fun(action action)
}
實際上通過此程式的定義結構可以清楚:
抽象類雖然定義了子類必須要做的事情,但是抽象類依然有單繼承的限制;
抽象類的使用必須通過子類進行物件例項化處理。
抽象類的定義與使用
1 在繼承類中,子類可以自由選擇是否覆寫父類方法,父類無法對子類做出強制性要求 強制覆寫 2 抽象類主要作用在於對子類中覆寫方法進行約定,在抽象類中定義抽象方法 使用abstract關鍵字電儀並且沒有提供方法體的方法 來實現。而且抽象方法所在的類必須為抽象類。abstract class perso...
抽象類定義 為什麼要使用抽象類
為什麼要使用抽象類?有什麼好處?答案 1 現實中一些父類中的方法沒必要寫 各個子類中的方法會有所不同 所以沒必要在父類中寫 2 看被人 時候會注意這是抽象方法 會有個提示作用 3 當看到乙個類是抽象的,要關心他的抽象方法,因為他的子類一定會重寫他,然後去找抽象類的引用,會有多型性的體現 4 物件導向...
抽象類的使用
28.選項中哪一行 可以替換題目中 add code here 而不產生編譯錯誤?public abstract class myclass a public abstract void method int a b constint constint 5 c public int method d...