JAVA類的全面總結
java是面向物件:
下面解釋什麼面向物件
JAVA操作都是類中操作如上圖Cat類,例項化可以在main函式中
那麼java本身就是類操作,為什麼還要學習繼承多型介面包?
官方回答:可讀性強,安全性高,程式碼簡化,維護性高,方便查詢錯誤等
下面我要從現實生活的角度去說,(僅個人觀點):
從現實世界中來,必然也要歸回現實生活,這是自然法則,那麼編成也不例外,我們生活中分類例子比比皆是,例如:動物類-----》 無脊椎和脊椎-----》中又可以分為----》爬行類,兩棲類。。。。。。。。為了更好的用程式語言刻畫自然界,顯然一個類是可以得,但是沒有遵循人類的天生分類記憶策略,因此有了繼承(子父類),父類表示animal類,cat類表示子類,cat類繼承了animal類的屬性和方法,那麼在繼承的同時,cat類會進化 學習,
上面貓類繼承了動物類,但是它不僅有animal類的屬性和行為,自己還會有其他fly,在cat類中,它的吃的東西可能比animal多,如果cat類操作本類中的eat方法,則用this關鍵字,如用animal類中,用super關鍵字
this和super關鍵字的用法解釋:
this只用於類內,而super用於子父類間或abstract類中;
this指向自己的引用;super實現對父類成員的訪問,用來引用當前物件的父類
在上圖animal類中的name,和age都是private,那麼要對name,age操作就需要同過 get,set操作,把get/set這個方法稱為封裝;
JAVA封裝:包裝隱藏方法,防止該類的程式碼和資料被外部修改
cat中的eat()方法與anmial中的eat()方法同名,那麼 這裡就會出現了類中的方法重寫(override);
通常重寫(override)與過載(overload)都是面試筆試的重點,下面分別說明他們的規則:
重寫規則:
- 引數列表相同,返回值相同
- 訪問許可權不能比父類中被重寫的方法的訪問許可權更低(訪問限定符:低-------->高 :public -->default---->protected------>private),且必須在同一 包中
- 父類成員方法只能被它的子類重寫
- 宣告為final的方法不能被重寫
- 宣告為static的方法不能被重寫,但是能被再次宣告
- 構造方法不能被重寫
- 當需要在子類中呼叫父類的被重寫方法時,要使用super關鍵字
過載規則:
- 過載是一類中,方法名相同,而引數不同,返回型別可以相同也可以不同
- 每個過載的方法都必須有一個獨一無二的引數型別列表
- 最重用的是構造器過載
- 被過載的方法可以改變:1.引數列表;2.返回型別,3.訪問修飾符;4.宣告新的或更廣的檢查異常
- 返回值不能作為過載函式的區分標準
方法的重寫和過載是Java多型性的不同表現,重寫是父類與子類之間多型性的一種表現,過載可以理解為 多型的具體表現形式
那麼為什麼要有過載和重寫方法,同多型一起解釋原因:
多型:
在多型中必包含重寫,繼承,父類引用指向子類物件
下面程式碼一目瞭然多型的使用:
animal a=new cat(); //向上轉型
a.eat();//呼叫cat的eat
cat b=(cat) a// 向下轉型
b.fly();//呼叫的是cat的fly
對於向上轉型:a引用是animal,因此在編譯時,會在animal中 找eat方法如果有編譯通過,如果沒有會報編譯錯誤,通過之後jvm會呼叫cat中的eat方法