首页 > 编程语言 >对于java中向上转型后调用.getClass()方法还是子类的原因

对于java中向上转型后调用.getClass()方法还是子类的原因

时间:2024-06-19 20:35:06浏览次数:25  
标签:调用 getClass 对象 子类 父类 转型 java 向上

  在java中有一个概念叫引用。

官方给的定义是这样的:在Java中,"引用"(Reference)是指一个变量,它存储了对象的内存地址,而不是对象本身。换句话说,引用是指向对象的指针或者句柄。在Java中,所有的对象都通过引用来访问和操作,而不是直接访问对象本身。 通俗的将就是一个指路人,当有人询问你之前new的Student对象时,他会带你指路帮你找到他在那里。

  这里我们实例一个Student对象s,和一个变量 People p。我们将变量赋s赋值给p,这里称之为向上转型。这里我们可以形象的将s和p看做是两个指路人,向上转型后指路人变为了p。但其内核不变,也就是我定义一个对象的一些属性值(元数据和同步信息我们暂且不谈)还被存储在内存中。所以现在的局面就是引路人p,但地点是s的内核。

  当调用.getClass();就是p引着路到s内核中去执行.getClass();行为。最后拿到的也就是Student了。

 

  所以这使得我们考虑:向上转型到底转的是什么?

  要想理解这个,我们首先要理解什么是向上转型。

  官方的定义是这样的:在Java中,向上转型(Upcasting)指的是将一个子类的对象引用赋给一个父类类型的变量。这种类型的转型是安全的,因为子类对象可以视为父类对象的特例。具体来说,向上转型将子类对象引用转换为父类对象引用。因此向上转型就是一个引用的传递过程。

  那转型有什么作用呢?

  ①转型后,可以使用父类类型的变量来访问继承自父类的方法和属性。 通俗的将就是p用自己的行为(方法)去s内核做一些事情。这里的属性依旧还是s的,只是你调用的人是p。

 

  ②转型后,可以调用被子类重写的父类方法,但不能直接调用子类特有的方法。也就是说,我调用咱两相同的方法时,只能调用s的。

  所以向上转型后我们可以这样看p,他就是一个只能用别人重写了的方法,和自己特有的方法的类。我简称之为挂羊头卖狗肉。

标签:调用,getClass,对象,子类,父类,转型,java,向上
From: https://www.cnblogs.com/y12123/p/18257318

相关文章

  • java基础·小白入门(二)
    目录Java数组、字符串、正则表达式数组基本知识二维数组字符串初始化基本用法正则表达式相关知识点Java语言的内存分配Java的增强for循环类和对象基本概念定义与创建应用Java数组、字符串、正则表达式数组基本知识Java中,数组元素可以为简单数据类型,也可以为......
  • Java设置JSON字符串参数编码
    1.如何在Java中创建JSON字符串在Java中创建JSON字符串,我们可以使用多个库,其中最流行的是Jackson、Gson和org.json。以下是使用这些库创建JSON字符串的示例:1.1使用Jackson库(1)首先,确保我们的项目中包含了Jackson的依赖(如果我们使用Maven,可以参考前面的示例)。(2)创建一个Java对象(例......
  • java datetime数据类型去掉时分秒
    在Java中,如果我们想要表示一个日期而不包括时间(时分秒),我们通常会使用java.time包中的LocalDate类。LocalDate是一个不可变的日期对象,它只包含年、月、日三个字段。1.datetime数据类型去掉时分秒案例一以下是如何使用LocalDate类以及如何从一个包含时间的日期时间对象(比如LocalD......
  • 1950 Springboot汽修技能点评系统idea开发mysql数据库APP应用java编程计算机网页源码m
    一、源码特点 springboot汽修技能点评系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术bootstrap.cssjquery......
  • 第五站:Java金——Spring框架的璀璨殿堂(一)
    第五站:Java金——Spring框架的璀璨殿堂踏入Java金的领域,我们来到了Spring框架的璀璨殿堂,这里是现代Java企业级应用开发的瑰宝。Spring通过其核心特性——依赖注入(IoC)和面向切面编程(AOP),以及SpringBoot的便捷启动与配置,为开发者提供了一条通往高效、简洁开发之路的金光大道......
  • 第八站:Java银——微服务架构的未来之光
    在云原生时代,Java凭借其强大的生态系统和成熟的微服务架构支持,成为了构建现代分布式系统不可或缺的一部分。以下是如何将Java、Docker、Kubernetes、以及SpringCloud结合起来,构建高效、可扩展的微服务应用的概述,结合简化的代码示例来说明这一过程。Docker容器化Docker提......
  • java datetime数据类型去掉时分秒
    在Java中,如果我们想要表示一个日期而不包括时间(时分秒),我们通常会使用java.time包中的LocalDate类。LocalDate是一个不可变的日期对象,它只包含年、月、日三个字段。1.datetime数据类型去掉时分秒案例一以下是如何使用LocalDate类以及如何从一个包含时间的日期时间对象(比如Loc......
  • Javascript入门博客【入门复习(学习)使用】
    JavaScript是一门高级,解释形语言,大量用于关于web网站的开发,可以和网页联动做出更多有趣的动画效果。其运行方式大都是嵌入在网页中运行。其实在定义方面如果过你是初学者来学习和这方面相关的知识,知道上面这些就已经足够了。我们可以在浏览器中直接进行对代码的控制,进入浏览器......
  • 【Java核心技术10】Java数组详解
    引言在Java编程中,数组是一种非常重要的数据结构,它允许我们存储同一类型的多个元素,并通过索引快速访问这些元素。本文将详细讲解Java数组的基本概念、创建、初始化、访问和修改,以及多维数组和数组的常见操作。无论你是Java的初学者,还是希望巩固基础的资深开发者,本文都将为......
  • 史上最全JAVA八股文——redis篇,欢迎收藏
    ......