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