父類引用指向子類物件

2021-08-19 16:14:41 字數 1616 閱讀 5603

package fuleiyinyongzhixiang;

public class animal

public void sleep()

}

package fuleiyinyongzhixiang;

public class person extends animal

public void play()

}

package fuleiyinyongzhixiang;

public class test

}

其控制台輸出是:我是人,我要吃大魚大肉

所謂的父類引用指向子類物件就是:在棧中定義乙個父類的引用去指向堆中子類的物件。那麼這樣做有什麼意義呢?因為子類是對父類的乙個改進和擴充,所以一般子類在功能上較父類更強大,屬性較父類更獨特, 定義乙個父類型別的引用指向乙個子類的物件既可以使用子類強大的功能,又可以抽取父類的共性。 所以,父類型別的引用可以呼叫父類中定義的所有屬性和方法,而對於子類中定義而父類中沒有的方法,父類引用是無法呼叫的;

1.該引用只能呼叫父類中定義的方法和變數; 

2.如果子類中重寫了父類中的乙個方法,那麼在呼叫這個方法的時候,將會呼叫子類中的這個方法;(動態連線、動態呼叫)

3.變數不能被重寫(覆蓋),」重寫「的概念只針對方法,如果在子類中」重寫「了父類中的變數,那麼在編譯時會報錯。

具體用處的話比較抽象,就用以下**說明吧:

public inte***ce animaldemo
public class persondemo implements animaldemo

public void eat()

public void play()

}

public class catdemo implements animaldemo

public void eat()

public void teshu()

}

public class testdemo 

}

public class testdmeo1 

}

其中控制台輸出結果如下:

由於介面裡面的方法都是抽象方法,所以說實現它的子類肯定會重寫裡面的方法。在例子中可看出,父類的引用指向子類物件的好處就是,如果用更改其子類物件只需要改testdemo1中的new catdemo( )就可以了,其他的全都不用改。或者說有其他動物要「加入」的話就直接讓它去實現animaldemo這個介面,然後直接把testdemo1中的new catdemo( )改掉就可以了。便於維護,而且擴充套件起來也方便。

父類引用指向子類物件

要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者就是前者是父類。我可以通過 cat c new cat 例項化乙個cat的物件,這個不難理解。但當我這樣定義時 animal a new cat 這代表什麼意思呢?很簡單,它表示我定義了乙個animal...

父類引用指向子類物件

是多型的一種實現方式 這樣做使程式靈活性更好,若有多個子類,只需改變引用就能實現不同的功能,而不需要改變程式 父類 a 子類 a1,a2 a obj1 new a1 a obj2 new a2 如果a有乙個方法是show 子類實現了show 那麼obj1.show 就是第乙個子類的show obj2...

關於父類引用指向子類物件

例如 有以下2個類 public class father public class son father father f new son 這種用法叫做 父類引用指向子類物件,或者叫 父類指標指向子類物件 指的是定義乙個父類的引用,而它實際指向的是子類建立的物件。好處是什麼?下面做幾個測試,第一種...