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

原创 2011年10月20日 10:50:18
继承和方法重写已经很熟悉了,这次

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


引用在栈内存中存在对象的内存地址。真正的对象(通过 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 ^-^




什么时候用有状态session bean,什么时候用无状态session bean

什么时候用有状态session bean,什么时候用无状态session bean最近,有关于无状态的许多大惊小怪。无状态的缺陷常常被夸大,它的优点也一样。许多无状态的支持者盲目的宣称无状态能带来更大...
  • xxcc
  • xxcc
  • 2001-12-14 09:25:00
  • 1746

父类引用指向子类对象属性值

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。 Animal animal = new...
  • xingxiupaioxue
  • xingxiupaioxue
  • 2017-04-13 00:51:08
  • 1510

java继承实质、父类引用指向子类对象(多态)、声明时类型、运行时类型

继承是面向对象的三大特征(封装、继承和多态)之一,也是java语言的重要特性。 那么,继承父类的成员变量和继承父类的方法有什么区别吗?答案是肯定的。有的人甚至都不知道这个问题的存在。 继承成员变量...
  • xuejingfu1
  • xuejingfu1
  • 2016-05-25 12:36:18
  • 2441

关于父类引用指向子类对象(A a = New B();)的使用,理解向上转型

首先什么是向上转型?       向上转型是JAVA中的一种调用方式,是多态的一种表现。向上转型并非是将B自动向上转型为A的对象,相反它是从另一种角度去理解向上两字的:它是对A的对象的方法的扩充,即A...
  • gh2391292
  • gh2391292
  • 2017-07-05 13:50:09
  • 731

父类引用指向子类对象的理解

虽然接触java已经好长时间了,但对于一些知识点,还是有些模糊,就比如今天说的这个。 接触java的人都知道,继承是面向对象的三个特征之一(封装、继承、多态),继承中有一对概念,即父类和子类。他们通过...
  • u013630932
  • u013630932
  • 2017-06-29 13:53:50
  • 354

父类引用指向子类对象

父类引用指向子类对象指的是: 例如父类Animal,子类Cat,Dog。其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。 Animal animal = new...
  • Kaiwii
  • Kaiwii
  • 2012-10-06 06:52:53
  • 60509

深入了解父类引用指向子类

父类应用指向子类对象指的是: 父类Animal,子类 Cat,Dog。其中Animal可以是接口或类,Cat和Dog 是继承或实现Animal的子类。 Animal animal= new Cat(...
  • han_yankun2009
  • han_yankun2009
  • 2014-10-25 13:06:55
  • 8924

Java多态性详细举例说明(很经典例子)

(一)相关类
  • free4294
  • free4294
  • 2014-09-04 16:37:28
  • 29264

JAVA父类引用指向子类的对象是什么意思?有什么作用?

转自:http://zhidao.baidu.com/question/397089741.html JAVA父类引用指向子类的对象是什么意思?有什么作用? 给你举个简单的例子吧。...
  • suyu_yuan
  • suyu_yuan
  • 2016-06-22 10:09:38
  • 3011

对用父类指针(或引用)指向父类对象和子类对象时,从而用父类指针或者引用访问成员时的深刻理解;

赋值兼容规则永远不变,父类指针既可以指向父类对象,也可以指向子类对象;当父类指针指向父类对象时,访问父类的成员;当父类指针指向子类对象时,那么只能访问子类中从父类继承下来的那部分成员;不能访问子类独有...
  • gogogo_sky
  • gogogo_sky
  • 2017-06-17 14:40:33
  • 1310
收藏助手
不良信息举报
您举报文章:java 中父类引用指向子类对象时
举报原因:
原因补充:

(最多只允许输入30个字)