到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?
Java語言具有的特點:面向對象、跨平臺、多線程以及網絡編程
1. 和C++的區別
1.1 Java隱蔽了C++的指針,避免指針直接操作,程序更加安全。
1.2 Java類繼承只能單繼承,避免了C++多繼承的復雜性。
1.3 Java完全面向對象,所有方法和變量都是類的一部分;而C++允許全局屬性。
1.4 C++支持操作符重載,而Java不支持操作符重載。
?
2. 面向對象
2.1 面向對象和面向過程的對比
2.1.1 面向過程:為了解決某個問題或實現某個功能,劃分成若干個步驟,每個步驟通過一個函數或一段代碼去實現。
優點:程序邏輯簡單,開發簡單的程序效率較高;消耗資源少
缺點:開發的系統耦合度高,拓展性低,不適用于復雜系統
2.1.2 面向對象:在開發中,將相關的數據和方法組織成一個個對象,通過操作對象實現功能。
優點:系統耦合度低、拓展性高,適用于開發復雜系統(高拓展性、低耦合度怎么體現)
缺點:需大量的系統分析與設計,從而抽象出各個對象;實例化對象消耗資源。
?
2.2 面向對象的三大特性——封裝、繼承和多態
2.2.1 封裝:①對于數據:合理控制成員變量訪問權限,在對外的操作接口中進行相應限制,可以增加數據的安全性。②對于功能:通過功能代碼的封裝,可實現代碼復用。
2.2.2 繼承:基本作用是代碼復用,主要作用是方法覆蓋和多態機制。只可以單繼承,沒有父類的所有類默認繼承java.lang包下的Object類。父類的私有方法和構造方法不會被繼承,也就不會有方法覆蓋,但是在內存中創建子類對象時,是會創建父類私有方法的,如下圖官方文檔。
?
因為私有方法不繼承,所以私有方法不會被覆蓋,所以哪種類型的引用,執行哪種類型的私有方法,如下圖。
?
父類的靜態方法有繼承,如下圖。
?
但是靜態方法在使用多態機制時,是編譯時多態(靜態綁定),也就是編譯時是哪個類型的對象調用靜態方法就執行哪個類型的靜態方法。
?
2.2.3 多態:父類型引用可以指向子類型對象(向上轉型,也稱自動類型轉換),根據子類型對象的不同而表現出不同的行為。符合OCP原則(Open Close Principle開閉原則,對拓展開放、對修改關閉),降低了程序的耦合度(實現者和調用者的耦合),提高了程序的拓展力,多態的高拓展性、低耦合度實現可以參考我的另一篇博客。多態中由于經常涉及到類型轉換,所以可以使用instanceof關鍵字判斷某個變量是否某一類型的實例對象。
?
3. 跨平臺?
3.1 java的運行環境
JDK(Java Development Kit): 是Java開發工具包,包含JRE、編譯器javac以及調試工具JDB和JAVAP等工具。
JRE(Java Runtime Environment): 是Java運行環境,包含JVM、java運行類庫以及基礎構件。
JVM(Java Virtual Machine): Java虛擬機,負責解釋、執行java字節碼文件,是Java實現跨平臺的核心。
3.2?java程序編譯、運行過程
java程序分為編譯和運行兩個階段,在終端執行 javac xxx.java 指令可以編譯java源程序,編譯主要是檢查源程序是否符合java語法規則,將源程序編譯為.class字節碼文件,字節碼文件是面向java虛擬機的,而不面向特定處理器;然后執行 java xxx.class?指令可以運行字節碼文件,不同平臺的java虛擬機負責將字節碼解釋運行在不同平臺上,實現了可移植性。
3.3 字節碼文件
字節碼文件分析可參考另一篇博客?https://blog.csdn.net/yldmkx/article/details/108942906
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的到底什么是面向对象,面试中怎么回答。面向过程和面向对象的区别是什么。java跨平台特性以及java和C++的区别。面向对象的三大特性——封装、继承和多态。面向对象的高拓展性以及低耦合度怎么体现?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java字节码解读
- 下一篇: Java中的与、或、非以及异或( | ~