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

java子类引用指向父类对象_java 中父类引用指向子类对象时继承和方法重写已经很熟悉了 这次主要验证一下 当一个父类的引用指向一个对象的时候 它会调用子类的方法 而不是父类的 引用在栈内存中存在对象的内存地址 真正的对象 通过 newStudent 创建的 存放在堆内存里 在这块堆内存区域内 存在的是子类的属性 包括自己特有的 以及通过 super 构造方法中从父类获得的 和方法 继承父类但没有覆盖的 以及覆盖父类的方法和自己特有的 尽管引用是声明为

继承和方法重写已经很熟悉了,这次

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223981.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:58
下一篇 2026年3月17日 下午12:59


相关推荐

  • Java有哪些编程语言

    Java有哪些编程语言Java作为一种年轻具有活力的编程语言,在最近几年是越来越受到市场的欢迎。它作为面向网络的程序设计语言,用来让程序员创建应用程序。Java是个面向对象的语言,由于它自身具备的入门门槛低等优点。那么,Java编程语言具有什么优点?接下来,就跟着千锋重庆Java的小编一起来了解下吧!1.Java语言是简单的Java语言的语法与C语言和C++语言很接近,使得大多数程序员很容易学习和使用。另一方面,Java丢弃了C++中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。Jav

    2022年7月7日
    24
  • SSM框架讲解(史上最详细的文章)[通俗易懂]

    SSM框架讲解(史上最详细的文章)[通俗易懂]SSM框架(白痴都看完都会)文章目录SSM框架(白痴都看完都会)介绍SSM框架<原理>一、什么是SSM框架?1.Spring2.SpringMVC3.Mybatis(核心是SqlSession)二、代码实战1.创建配置工程2.代码书写介绍SSM框架<原理>一、什么是SSM框架?SSM框架是spring、springMVC、和mybatis框架的整合,是标准的MVC模式。标准的SSM框架有四层,分别是dao层(mapper),service层,controller层

    2022年7月12日
    27
  • 打开VS2010提示:产品密钥框

    打开VS2010提示:产品密钥框                                          &n

    2022年6月5日
    44
  • idea2022激活码-激活码分享

    (idea2022激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsaWNlbnNlSW…

    2022年3月22日
    293
  • Apache配置详解(最好的APACHE配置教程)

    Apache配置详解(最好的APACHE配置教程)Apache的配置由httpd.conf文件配置,因此下面的配置指令都是在httpd.conf文件中修改。主站点的配置(基本配置)(1)基本配置:ServerRoot”/mnt/software/apache2″#你的apache软件安装的位置。其它指定的目录如果没有指定绝对路径,则目录是相对于该目录。PidFilelogs/httpd.pid#第一个httpd进程(所有其他进程的父

    2022年7月14日
    22
  • GPT-4 API 国内怎么调?3 种方案实测,附完整 Python 代码

    GPT-4 API 国内怎么调?3 种方案实测,附完整 Python 代码

    2026年3月13日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号