<center>JAVA與C++的差異(2)</center>
JAVA的面向?qū)ο?/h2>
類的所有方法,均為虛方法(虛函數(shù))
關(guān)鍵字 | 作用 |
---|---|
instanceof |
檢查當前類是否屬于某個類的派生類,返回值BOOL 類型 |
extends |
繼承關(guān)鍵字,聲明當前類繼承于什么基類 |
interface |
聲明接口類, 無需實現(xiàn)代碼,僅為聲明接口,表明此類至少有一個純虛方法,無法擁有非Static 和Final 之外的字段 ,接口方法默認為公有 |
implements |
基類為接口類, 實現(xiàn)基類的純虛方法 |
final |
相當于C++的Const
|
Abstraction |
抽象類, 無法被實例的類, 一個純虛基類, 派生類繼承,必須實現(xiàn)基類的方法或繼續(xù)聲明為抽象的方法 |
繼承同C++, 關(guān)鍵字變?yōu)?code>extends
不支持多重繼承,但是提供多重繼承功能, 可以實現(xiàn)多個基類的方法(即多重繼承)
方法重寫規(guī)則
即C++的派生類對基類的虛函數(shù)覆蓋
派生類中同名,同參,同返回值,基類中屬性為public
或protect
等可繼承的虛函數(shù)
? 重寫方法的參數(shù)列表應(yīng)該與原方法完全相同刊苍。
? 返回值類型應(yīng)該和原方法的返回值類型一樣或者是它在父類定義時的子類型。
? 重寫函數(shù)訪問級別限制不能比原函數(shù)高沽甥。舉個例子:如果父類方法聲明為公有的祷蝌,那么子類中的重寫方法不能是私有的或是保護的调衰。
? 只有被子類繼承時碴倾,方法才能被重寫检碗。
? 方法定義為 final扇雕,將導(dǎo)致不能被重寫。
? 一個方法被定義為 static,將使其不能被重寫绪囱,但是可以重新聲明测蹲。
? 一個方法不能被繼承,那么也不能被重寫毕箍。
? 和父類在一個包中的子類能夠重寫任何沒有被聲明為 private 和 final 的父類方法。
? 和父類不在同一個包中的子類只能重寫 non-final 方法或被聲明為 public 或 protected 的方法道盏。
? 一個重寫方法能夠拋出任何運行時異常而柑,不管被重寫方法是否拋出異常。然而重寫方法不應(yīng)該拋出比被重寫方法聲明的更新更廣泛的已檢查異常荷逞。重寫方法能夠拋出比被重寫方法更窄或更少的異常媒咳。
由于JAVA 無法使用C++的
::
作用域符, 所以提供了一個super
的關(guān)鍵字,以供派生類調(diào)用基類的方法
多態(tài)
多態(tài)同C++, 派生類指針轉(zhuǎn)基類指針調(diào)用虛函數(shù), 由于JAVA沒有指針,則為引用賦值
接口
(類無法多重繼承)接口類可繼承多個接口:
public interface Hockey extends Sports, Event
JAVA包
JAVA包名同C++命名空間的作用
包名一般為小寫,避免與類的方法重名
包的導(dǎo)入用 import
關(guān)鍵字
- 可以使用 import 關(guān)鍵字和通配符(*)來導(dǎo)入。例如:
import packName.*;
- 可以使用 import 關(guān)鍵字來導(dǎo)入類本身种远。例如:
import packName.ClassName;
注: 一個類的文件可以包含任意數(shù)量的導(dǎo)入語句涩澡。這些導(dǎo)入語句必須位于包聲明語句之后和類的定義語句之前。