java 中父类引用指向子类对象时

来源:互联网 发布:润和软件待遇 编辑:程序博客网 时间:2024/05/01 14:34
继承和方法重写已经很熟悉了,这次

主要验证一下,当一个父类的引用指向一个对象的时候,它会调用子类的方法,而不是父类的。


引用在栈内存中存在对象的内存地址。真正的对象(通过 new Student()创建的)存放在堆内存里。

在这块堆内存区域内,存在的是子类的属性(包括自己特有的,以及通过super()构造方法中从父类获得的)

和方法(继承父类但没有覆盖的,以及覆盖父类的方法和自己特有的),尽管引用是声明为父类的引用,

但是它指向的子类的对象,在执行方法的时候,是通过引用指向的堆内存区域内执行的。也就是到底执行父类

方法还是子类方法是由对象决定的,跟引用没有直接关系。


演示代码如下:


Person.java

public class Person{        private String name;    public Person(){}    public void setName(String name){        this.name = name;        }    public String getName(){        return this.name;        }        public void introduce(){        System.out.println("Hello, I'm a Person object, and my name is "            +getName());        }}




Student.java
public class Student extends Person{        public Student(){        super();        }        public void introduce(){        System.out.println("I'm a Student object and my name is "            +getName());        }}





Test.java
public class Test{    public static void main(String[] args){        Person p = new Student();        p.setName("^-^");        p.introduce();    }}

输出结果为:

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




原创粉丝点击