歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java 中父類引用指向子類對象時

Java 中父類引用指向子類對象時

日期:2017/3/1 11:10:35   编辑:Linux編程
繼承和方法重寫已經很熟悉了,這次主要驗證一下,當一個父類的引用指向一個對象的時候,它會調用子類的方法,而不是父類的。

引用在棧內存中存在對象的內存地址。真正的對象(通過 new Student()創建的)存放在堆內存裡。

在這塊堆內存區域內,存在的是子類的屬性(包括自己特有的,以及通過super()構造方法中從父類獲得的)和方法(繼承父類但沒有覆蓋的,以及覆蓋父類的方法和自己特有的),盡管引用是聲明為父類的引用,但是它指向的子類的對象,在執行方法的時候,是通過引用指向的堆內存區域內執行的。也就是到底執行父類方法還是子類方法是由對象決定的,跟引用沒有直接關系。


演示代碼如下:


Person.java

  1. public class Person{
  2. private String name;
  3. public Person(){}
  4. public void setName(String name){
  5. this.name = name;
  6. }
  7. public String getName(){
  8. return this.name;
  9. }
  10. public void introduce(){
  11. System.out.println("Hello, I'm a Person object, and my name is "
  12. +getName());
  13. }
  14. }
Student.java
  1. public class Student extends Person{
  2. public Student(){
  3. super();
  4. }
  5. public void introduce(){
  6. System.out.println("I'm a Student object and my name is "
  7. +getName());
  8. }
  9. }
Test.java
  1. public class Test{
  2. public static void main(String[] args){
  3. Person p = new Student();
  4. p.setName("^-^");
  5. p.introduce();
  6. }
  7. }
輸出結果為:

I'm a Student object and my name is ^-^

Copyright © Linux教程網 All Rights Reserved