成都java開發培訓
達內成都高升橋中心

成都java程序員學習:組合和繼承

  • 時間:2021-01-07 16:00
  • 發布:成都達內
  • 來源:成都達內

為了避免重復代碼太多,導致代碼不好維護,大家需要學會如何復用代碼,代碼復用的兩種方式,組合和繼承

組合:在新類中創建現有類的對象

繼承:創建現有類的新類

向上轉型

class Instrument {

public void play() {

System.out.println("Instrument.play()");

}

}

public class Wind extends Instrument {

public void play() {

System.out.println("Wind.play()");

}

}

public class Music {

public static void tune(Instrument i){

i.play();

}

public static void main(String[] args) {

Wind flute = new Wind();

Music.tune(flute); // 向上轉型

}

}

從一個更具體的類型轉化為更一般的類型,所以向上轉型用掛失安全的。子類可能會比父類包含更多的方法,必須至少具有和父類一樣的方法。

final

final方法

final方法的作用是防止子類通過重寫改變方法的行為

類中所有的private方法都是隱式的指定為final,因為不能訪問private方法,所以不能重寫它。給private方法加上final修飾并不會給方法帶來額外的含義。重寫一個private方法時編譯并不會報錯,一個方法是private的,他就不屬于父類的一部分,只是創建了一個同名的方法而已

final類

final類的作用是該類不允許被繼承

多態

方法綁定

對于上述向上轉型的例子,編譯器如何知道該調用哪個方法,方法的入參只是一個Instrument引用

java采用后期綁定,在運行時根據對象的類型進行綁定,在運行時判斷對象的類型,從而調用方法,在編譯時編譯器不知道對象的類型,java對于static和final方法無法采用后期綁定(private方法也是隱式的final)

多態的陷阱

注:多態只是針對于普通方法,對于屬性和靜態方法不會存在多態

屬性在編譯時就會被解析

public class Parent {

public int field = 0;

public int getField(){

return field;

}

}

public class Child extends Parent {

public int field = 1;

@Override

public int getField(){

return field;

}

}

public class TestField {

public static void main(String[] args) {

Parent parent = new Child();

System.out.println("parent.field= "+parent.field);

System.out.println("parent.getField= "+parent.getField());

Child child = new Child();

System.out.println("child.field= "+child.field);

System.out.println("child.getField= "+child.getField());

}

}

執行結果

parent.field= 0

parent.getField= 1

child.field= 1

child.getField= 1

Parent.field和Child。field被分配了不同的存儲空間,Child其實是存在兩個filed屬性的:本身的以及父類的,但是在引用Child的field的時候,默認的field屬性是來自于本身的,如果要獲取父類的該屬性,需要使用super.field來顯示地指定獲取父類屬性

但是這種情況一般不會發生,首先屬性一般來說都是私有private的,其次子類和父類一般也不會起相同的屬性名字

對于靜態方法的話,靜態方法只與類關聯,與對象無關

上一篇:成都java程序員培訓:Spring Boot 2.x實現文件上傳
下一篇:成都java培訓機構:類文件結構

成都java培訓機構推薦:Java注解和反射

成都java學習:Spring Initializr中生成的mvnw是干嗎的?

成都java技術培訓班:什么是JAVA內部類?

成都java培訓周末班:Soul網關websocket同步數據

  • 關注微信公眾號

    回復關鍵字:視頻資料

    免費領取 達內課程視頻學習資料

  • 視頻學習QQ群

    添加QQ群:1143617948

    免費領取達內課程視頻學習資料

Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

選擇城市和中心
江西省

貴州省

廣西省

海南省

色综合AV社区男人的天堂