###物件導向(繼承)###
1. 繼承的概念:繼承是類與類的一種關係,是一種“is a”的關係
父類--->基類 子類--->衍生類別
註:JAVA中的繼承是單繼承
2. 繼承的優點:子類擁有父類的所有屬性和方法(private修飾的無效)實現代碼複用
3. 文法規則:class 子類 extends 父類
例:
package example;public class Animal {public int age;public String name;public void eat() {System.out.println("動物不吃東西就會餓");}}package example;public class Dog extends Animal{}
4. 方法的重寫:如果子類對繼承父類的方法不滿意,是可以重寫父類繼承的方法的,當調用方法時會有限調用子類的方法
文法規則:傳回值類型,方法名,參數類型及個數都要與父類繼承的方法相同,才叫方法重寫
例:在狗狗類中增加eat方法
package example;public class Dog extends Animal{public void eat() {System.out.println("年齡:"+age+"\n狗狗不吃東西就會餓");}}
5. 繼承中初始化順序
1)初始化父類再初始子類
2)先執行初始化對象中屬性,再執行構造方法中的初始化
例:
package example;public class Animal {public int age;public String name;public void eat() {System.out.println("年齡:"+age+"\n動物不吃東西就會餓");}public Animal() {System.out.println("這是執行了Animal類");}}package example;public class Dog extends Animal{public Dog() {System.out.println("這是執行了Dog類");}}
再例如:
我們在Animal類中先給age賦值,再在Animal方法中給age再次賦值
package example;public class Animal {public int age = 10;public String name;public void eat() {System.out.println("年齡:"+age+"\n動物不吃東西就會餓");}public Animal() {System.out.println("這是執行了Animal類");age = 20;}}
接下來我們看看輸出結果
6. final關鍵字的使用
使用final關鍵字做標識有“最終的”含義,即不可修改不可變化
final可以修飾類、方法、屬性和變數
ps:當修飾類的時,則該類不可以被繼承
當修飾方法時,則該方法不循序被覆蓋(重寫)
當修飾屬性時,則該類的屬性不會進行隱式的初始化(類的屬性化屬性必須有值)在構造方法中賦值(但只能選其一)
當修飾變數時,則該變數的值只能賦一次值,即變為常量
7. super關鍵字的使用:在對象內部使用,可以代表父類對象
1)訪問父類的屬性:super.age
2)訪問父類的方法:super.eat()
例:
package example;public class Dog extends Animal{public Dog() {System.out.println("這是執行了Dog類");}public void method() {System.out.println(super.age);super.eat();}}
3)super的應用
子類的構造方法的過程中必須調用其父類的構造方法。
public class Dog extends Animal{public Dog() {super(); //這裡是顯示的 寫與不寫是一樣的 但寫的話必須放在第一行System.out.println("這是執行了Dog類");}public void method() {System.out.println(super.age);super.eat();}}
如果子類的構造方法中沒有顯示調用父類的構造方法,則系統預設調用父類無參構造方法
如果顯示的調用構造方法,必須在紫二磊的構造方法的第一行。
如果子類構造方法中既沒有顯式調用父類的構造方法,而父類又沒有無參構造方法,則編譯出錯
public class Animal {public int age = 10;public String name;public void eat() {System.out.println("年齡:"+age+"\n動物不吃東西就會餓");}/*public Animal() {System.out.println("執行Animal類構造方法");}*/public Animal(int age) {this.age = age ;}}
8. Object類:是所有類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麼這個類預設繼承Object類。
Object類中的方法,適合所有的子類。
1)toString()方法
在Object類裡面定義一個toString()方法的時候返回的對象的雜湊code碼(對象地址字串)
可以通過重寫toString()方法表示出對象的屬性。
2)equals()方法
比較的是對象的引用是否指向同一塊記憶體位址。
一般情況下比較兩個對象時比較他的值是否一致,所以要進行重寫。
此時若同時給age賦相同值
由此可見還是輸出false 在這我們建立equals方法
建立equals方法: Source --> Generate hashCode() and equals()...
@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass()) //判斷兩個對象的類型是否相同return false;Dog other = (Dog) obj;if (age != other.age)return false;return true;}
此時結果就為true了
####END####
相關文章:
JAVA入門系統教程(六)物件導向(封裝)
JAVA入門系統教程(七)物件導向(封裝2)