Java面向對象之繼承性的實例代碼詳解
A類繼承B類,是指A類可以擁有B類的非私有屬性和方法,同時A類也可以自己定義屬性方法或重寫方法以擴充自己的功能。
1.1 方法的重寫重寫方法時,方法的方法名、返回值類型和參數個數及類型均需一致。首先定義父類Animal,包含年齡、名字兩個屬性及吃的方法。
public class Animal { int age; String name; public void eat(){ System.out.println('動物可以吃東西'); }}
通過子類Dog繼承父類Animal,并重寫eat方法,在調用重寫的eat方法之前,設置繼承來的年齡屬性值為10。
public class Dog extends Animal{ public void eat(){ System.out.println(age+'歲的狗狗可以吃東西'); } public static void main(String[] args) { Dog dog1 = new Dog(); dog1.age = 10; dog1.eat();//10歲的狗狗可以吃東西 }}1.2 繼承的初始化順序
初始化即執行類的構造方法,在Java中,繼承的初始化順序如下:
父類的屬性 > 父類的構造方法 > 子類的屬性 > 子類的構造方法
public class Animal { int age = 10; public Animal(){ System.out.println('父類Animal執行了'); age = 20; }}public class Dog extends Animal{ public Dog(){ System.out.println('子類Dog執行了'); } public static void main(String[] args) { Animal a = new Animal(); System.out.println(a.age); Dog dog1 = new Dog(); }}
運行結果如下圖所示:
當使用final關鍵字后,變量就成了常量,值不能被改變;方法也不能被繼承使用。
二、this與super2.1 this關鍵字this關鍵字代表當前對象,this.屬性代表操作當前對象的屬性,this.方法代表調用當前對象的方法。
2.2 super關鍵字super在對象內部使用,代表父類對象。如果要調用父類的屬性age,使用super.age;如果要調用父類的方法eat(),使用super.eat()。如下代碼所示:
public class Dog extends Animal{ int age = 20; public void eat(){ System.out.println(age+'歲的狗狗可以吃東西'); } public Dog(){ System.out.println('子類Dog執行了'); } public void method(){ super.eat(); } public static void main(String[] args) { Dog dog1 = new Dog(); dog1.method();//動物可以吃東西 }}
子類構造的過程當中,必須調用其父類的構造方法。在子類的構造方法第一句隱式的寫了一句super();。
public class Dog extends Animal{ int age = 20; public Dog(){ super();//寫與不寫都一樣,系統隱式調用 System.out.println('子類Dog執行了'); } public static void main(String[] args) { Dog dog1 = new Dog(); //父類Animal執行了 //子類Dog執行了 }}
如果子類的構造方法中沒有顯示的調用父類的構造方法,則系統默認調用父類無參的構造方法。如果顯示的調用構造方法,必須在構造方法的第一行。
所以,如果子類的構造方法中既沒有顯示的調用父類的構造方法,而父類又沒有無參的構造方法,則編譯出錯。
三、Object類Object類是所有類的父類,默認被所有類繼承。
3.1 toString()toString()方法返回對象的地址(即Hash碼),如果要查看對象的屬性及屬性值,則可以重寫toString()方法(通過eclipse菜單中source可自動生成)。
public class Dog extends Animal{ int age = 20; @Override public String toString() { return 'Dog [age=' + age + ']'; } public static void main(String[] args) { Dog dog1 = new Dog(); System.out.println(dog1.toString());//未重寫方法前的結果:Dog@15db9742 System.out.println(dog1.toString());//Dog [age=20] }}3.2 equals()
equals()方法比較的是兩個對象的引用是否指向同一塊內存地址。
public class Dog extends Animal{ public static void main(String[] args) { Dog dog1 = new Dog(); Dog dog2 = new Dog(); if(dog1.equals(dog2)){ System.out.println('兩個對象相同'); }else{ System.out.println('兩個對象不同'); } }}
輸出的結果是“兩個對象不同”。如果僅需判斷兩個對象的屬性值是否相等,可以通過eclipse重寫equals方法。如下代碼所示:
public class Dog extends Animal{ @Override public 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; } public static void main(String[] args) { Dog dog1 = new Dog(); dog1.age = 15; Dog dog2 = new Dog(); dog2.age = 15; if(dog1.equals(dog2)){ System.out.println('兩個對象相同'); }else{ System.out.println('兩個對象不同'); } }}
最后輸出結果是,兩個對象相同。
注:文章根據本站相關課程的學習筆記整理而來,有錯誤或其他任何問題敬請指正,歡迎共同學習交流!
以上就是詳解Java面向對象之繼承性的詳細內容,更多關于Java 面向對象繼承性的資料請關注好吧啦網其它相關文章!
相關文章:
1. 將properties文件的配置設置為整個Web應用的全局變量實現方法2. 一文秒懂idea的git插件跟翻譯插件3. docker compose idea CreateProcess error=2 系統找不到指定的文件的問題4. XML入門的常見問題(四)5. python中pandas.read_csv()函數的深入講解6. Python通過format函數格式化顯示值7. layui Ajax請求給下拉框賦值的實例8. JS中的常見數組遍歷案例詳解(forEach, map, filter, sort, reduce, every)9. JS算法題解旋轉數組方法示例10. python爬蟲利用代理池更換IP的方法步驟
