1. 程式人生 > >面向對象一

面向對象一

範圍 his class super shc 不能 發生 alt 分享圖片

繼承

  個人理解默認子類會繼承父類所有,和訪問修飾符無關,訪問修飾符限制了子類可以訪問的父類對象。

  java官方文檔,子類不能繼承父類private修飾的成員變量和方法,但是可以通過其他公開的方法調用。從側面來對變量或方法產生影響。

內存結構: 

  父類對象首先被創建出來,在創建的子類對象,子類對象空間包含直接父類空間,this、super關鍵字分別被賦值為當前子類對象的和父類對象的地址符,

當使用this和super關鍵字的時候 ,實際上使用的當前子類對象和父類對象。

  每個具有繼承關系的子類都有一個直接父類。

從內存結構可以看出實際上子類對象是包含父類對象的,所以說繼承是繼承了父類對象的所有,但是如果父類對象的相關成員被private修飾的話,只能是父類對象自己訪問,其他類是訪問不了,但是實際上子類對象還是繼承了,只是不能訪問。(當然這是個人觀點。。。。實際上java官方說的還是有道理的。。。)

技術分享圖片

this,super關鍵字

this關鍵字表示對當前對象的引用;

  變量、方法:直接使用this.變量名或this.方法名調用

  構造器:在構造器中使用this引用其他構造器的時候一定要是構造器方法體第一句

super關鍵字表示對當前子類對象的直接父類對象的用;

  變量、方法:在子類中直接是使用super.變量名和方法名使用,代表對父類對象變量和方法的引用

  構造器:在子類構造器中使用,必須要在構造器第一句,可以不寫,編譯器會默認加上第一句,用來生成父類對象。

  當子類構造器被調用的時候,由於super()調用父類構造器,所以首先進入到父類的構造器中創建父類對象,父類對象創建完畢,再回到子類構造器執行構造器下面的語句創建子類構造器。

訪問修飾符的權限

private 權限最小,只能本類使用

dafault 範圍 相同包的類

protected 範圍相同包的所有類,不同包的子類

public 範圍 整個項目都可使用

技術分享圖片

方法重寫和方法重載的區別

方法重寫(override):發生在繼承當中,子類重寫父類方法

  要求:返回類型相同,方法名相同,參數列表相同,修飾符的權限不能比子類小

方法重載(overload):發生在同一個類中,

  要求:方法名相同,參數列表不同,和修飾符、返回類型無關

Object類

Object類是 所有類的基類,如果創建一個類,沒有指定父類,那麽他默認繼承Object類,

Object方法:getClass()返回當前對象的Class對象,用於反射

      hashCode() 返回當前對象的hash碼

      toString()返回當前對象的類型+@+hash碼 字符串,,一般Object的子類會重寫toString方法。

     equals()使用來表示兩個引用類型的數值是否相等。

==和equals()

==:1.比較基本數據類型的數值

  2.比較引用數據類型的地址符

equals():比較引用數據類型的數值

面向對象一