在抽象类中可以没有抽象方法_是否可以在最终课程中使用抽象方法?
在抽象類中可以沒有抽象方法
這是最近在Java開發(fā)人員工作面試的電話面試中向我的一位讀者提出的有趣的Java核心問題之一。 即使他知道你
無法用Java將抽象類定型為final ,他對方法的措辭感到困惑。 答案很簡單,不,在Java的最終類中不可能有抽象方法。 為什么? 因為一旦在Java類中聲明抽象方法,該類就會自動變?yōu)槌橄箢?#xff0c;并且您無法像前面所討論的那樣在Java中將抽象類定為final ,因此,在Java的final類中不可能有抽象方法。
正如我說過的那樣,許多Java程序員對這個問題的措辭感到困惑,就像我說的那樣,即使是被問到這個問題的讀者也很熟悉這個概念,他并沒有意識到,只要您在其中聲明了一個抽象方法就可以了。一個類,它將成為一個抽象類,并且不可能在Java中將抽象類定型為final。
這是一條丟失的信息,或者您稱其為把它與更流行和常見的問題分開的把戲,是否可以在Java中聲明一個抽象類和final類 ?
讓我們看一個代碼示例,以證明這一點,即您無法在最終類中聲明抽象方法。 我們有一個名為Hello的公共最終類,該類中有一個名為print()的抽象方法。
Hello.java文件。
在Eclipse IDE中鍵入該命令后,將立即收到以下錯誤消息:
Hello類型必須是抽象類才能定義抽象方法
這是另一個屏幕快照,顯示您在Java的最終類中不能擁有抽象方法:
當(dāng)您在記事本中寫下此代碼并從命令行窗口使用javac對其進行編譯時 ,情況也是如此。 根據(jù)Java規(guī)范,一旦在類中聲明了抽象方法,該方法便自動成為抽象類,并且由于無法在Java中將抽象類定型為最終類,因此編譯器將引發(fā)錯誤。
Java中的頂級類或嵌套類均是如此。 即使在嵌套的最終類上聲明抽象方法 ,您也會收到相同的錯誤。
關(guān)于此主題的另一個后續(xù)問題是,抽象類可以在Java中具有靜態(tài)方法嗎? 答案是肯定的,在Java中的抽象類中聲明靜態(tài)方法沒有問題,因為您無需實例化類即可使用靜態(tài)方法,只需使用類名即可調(diào)用它們。
我們可以修改代碼示例,使其在Hello類中包括main()方法 ,該類是Java中的靜態(tài)方法,如下所示:
public abstract class Hello {public abstract void print();public static void main(String args[]) {.. some code here}}您可以看到?jīng)]有編譯時錯誤。 代碼可以很好地編譯,因此在Java 抽象類中聲明靜態(tài)方法是完全可以的。
這就是關(guān)于是否可以在最終類中使用抽象方法的全部內(nèi)容? 正如我說的那樣,這是不可能的,因為一旦您在類內(nèi)部創(chuàng)建了抽象方法,按照Java規(guī)范,該類就會自動成為抽象類。 由于您無法使用Java將最終類抽象化,因此這變得非法,并且編譯器會通過拋出錯誤來禁止這樣做。 但是,是的,您可以在最終類和抽象類上都聲明靜態(tài)方法,這沒有問題。 如果您正在學(xué)習(xí)Java,建議您進一步閱讀
不耐煩的Core Java讓您熟悉諸如抽象和最終類之類的核心概念。 它還涵蓋了Java 8。
其他相關(guān)Java面試問題的練習(xí)
進一步閱讀
Java編程面試公開
Head First Java第二版
感謝您閱讀本文,如果您喜歡這個核心Java面試問題和我的解釋,請與您的朋友和同事分享。
翻譯自: https://www.javacodegeeks.com/2017/07/possible-abstract-method-final-class.html
在抽象類中可以沒有抽象方法
總結(jié)
以上是生活随笔為你收集整理的在抽象类中可以没有抽象方法_是否可以在最终课程中使用抽象方法?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 启辰首款纯电紧凑 SUV 车型 VX6
- 下一篇: nodejs异步测试_异步过程的自动化测