Java面向?qū)ο笾^承性的實(shí)例代碼詳解
一、類的繼承
A類繼承B類,是指A類可以擁有B類的非私有屬性和方法,同時(shí)A類也可以自己定義屬性方法或重寫方法以擴(kuò)充自己的功能。
1.1 方法的重寫
重寫方法時(shí),方法的方法名、返回值類型和參數(shù)個(gè)數(shù)及類型均需一致。
首先定義父類Animal,包含年齡、名字兩個(gè)屬性及吃的方法。
public class Animal {
int age;
String name;
public void eat(){
System.out.println("動(dòng)物可以吃東西");
}
}
通過子類Dog繼承父類Animal,并重寫eat方法,在調(diào)用重寫的eat方法之前,設(shè)置繼承來的年齡屬性值為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 繼承的初始化順序
初始化即執(zhí)行類的構(gòu)造方法,在Java中,繼承的初始化順序如下:
父類的屬性 > 父類的構(gòu)造方法 > 子類的屬性 > 子類的構(gòu)造方法
public class Animal {
int age = 10;
public Animal(){
System.out.println("父類Animal執(zhí)行了");
age = 20;
}
}
public class Dog extends Animal{
public Dog(){
System.out.println("子類Dog執(zhí)行了");
}
public static void main(String[] args) {
Animal a = new Animal();
System.out.println(a.age);
Dog dog1 = new Dog();
}
}
運(yùn)行結(jié)果如下圖所示:

當(dāng)使用final關(guān)鍵字后,變量就成了常量,值不能被改變;方法也不能被繼承使用。
二、this與super
2.1 this關(guān)鍵字
this關(guān)鍵字代表當(dāng)前對(duì)象,this.屬性代表操作當(dāng)前對(duì)象的屬性,this.方法代表調(diào)用當(dāng)前對(duì)象的方法。
2.2 super關(guān)鍵字
super在對(duì)象內(nèi)部使用,代表父類對(duì)象。如果要調(diào)用父類的屬性age,使用super.age;如果要調(diào)用父類的方法eat(),使用super.eat()。如下代碼所示:
public class Dog extends Animal{
int age = 20;
public void eat(){
System.out.println(age+"歲的狗狗可以吃東西");
}
public Dog(){
System.out.println("子類Dog執(zhí)行了");
}
public void method(){
super.eat();
}
public static void main(String[] args) {
Dog dog1 = new Dog();
dog1.method();//動(dòng)物可以吃東西
}
}
子類構(gòu)造的過程當(dāng)中,必須調(diào)用其父類的構(gòu)造方法。在子類的構(gòu)造方法第一句隱式的寫了一句super();。
public class Dog extends Animal{
int age = 20;
public Dog(){
super();//寫與不寫都一樣,系統(tǒng)隱式調(diào)用
System.out.println("子類Dog執(zhí)行了");
}
public static void main(String[] args) {
Dog dog1 = new Dog();
//父類Animal執(zhí)行了
//子類Dog執(zhí)行了
}
}
如果子類的構(gòu)造方法中沒有顯示的調(diào)用父類的構(gòu)造方法,則系統(tǒng)默認(rèn)調(diào)用父類無參的構(gòu)造方法。如果顯示的調(diào)用構(gòu)造方法,必須在構(gòu)造方法的第一行。
所以,如果子類的構(gòu)造方法中既沒有顯示的調(diào)用父類的構(gòu)造方法,而父類又沒有無參的構(gòu)造方法,則編譯出錯(cuò)。
三、Object類
Object類是所有類的父類,默認(rèn)被所有類繼承。
3.1 toString()
toString()方法返回對(duì)象的地址(即Hash碼),如果要查看對(duì)象的屬性及屬性值,則可以重寫toString()方法(通過eclipse菜單中source可自動(dòng)生成)。
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());//未重寫方法前的結(jié)果:Dog@15db9742
System.out.println(dog1.toString());//Dog [age=20]
}
}
3.2 equals()
equals()方法比較的是兩個(gè)對(duì)象的引用是否指向同一塊內(nèi)存地址。
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("兩個(gè)對(duì)象相同");
}else{
System.out.println("兩個(gè)對(duì)象不同");
}
}
}
輸出的結(jié)果是“兩個(gè)對(duì)象不同”。如果僅需判斷兩個(gè)對(duì)象的屬性值是否相等,可以通過eclipse重寫equals方法。如下代碼所示:
public class Dog extends Animal{
@Override
public boolean equals(Object obj) {
if (this == obj) //如果參數(shù)對(duì)象和當(dāng)前對(duì)象相同,則一定相同
return true;
if (obj == null) //如果參數(shù)對(duì)象為空,則一定不同
return false;
if (getClass() != obj.getClass())//如果參數(shù)對(duì)象的類對(duì)象和當(dāng)前對(duì)象的類對(duì)象不相等,則不相同
return false;
Dog other = (Dog) obj;//將參數(shù)進(jìn)行強(qiáng)制轉(zhuǎn)換
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("兩個(gè)對(duì)象相同");
}else{
System.out.println("兩個(gè)對(duì)象不同");
}
}
}
最后輸出結(jié)果是,兩個(gè)對(duì)象相同。
注:文章根據(jù)本站相關(guān)課程的學(xué)習(xí)筆記整理而來,有錯(cuò)誤或其他任何問題敬請(qǐng)指正,歡迎共同學(xué)習(xí)交流!
以上就是詳解Java面向?qū)ο笾^承性的詳細(xì)內(nèi)容,更多關(guān)于Java 面向?qū)ο罄^承性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
IntelliJ idea 如何生成動(dòng)態(tài)的JSON字符串(步驟詳解)
這篇文章主要介紹了IntelliJ idea 如何生成動(dòng)態(tài)的JSON字符串,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
詳解Java的Hibernate框架中的set映射集與SortedSet映射
這篇文章主要介紹了詳解Java的Hibernate框架中的set映射集與SortedSet映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12
Java ArrayList.add 的實(shí)現(xiàn)方法
這篇文章主要介紹了Java ArrayList.add 的實(shí)現(xiàn)方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11
java集合_淺談Iterable和Iterator的區(qū)別
下面小編就為大家?guī)硪黄猨ava集合_淺談Iterable和Iterator的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09
Spring 框架中注入或替換方法實(shí)現(xiàn)
這篇文章主要介紹了Spring 框架中注入或替換方法實(shí)現(xiàn),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-05-05
BufferedReader中read()方法和readLine()方法的使用
這篇文章主要介紹了BufferedReader中read()方法和readLine()方法的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04

