Java-对象转型(casting)

2023-11-13

对象转型(casting)
一个基类的引用类型变量可以指向其子类的对象
一个基类的引用不可以访问其子类对象新增加的方法(属性,方法)
可以使用 引用 变量instanceof类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类
子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之则称为向下转型(downcasting)

这里来看第一段程序:

class Animal{
	public String name;
	Animal(String name){
		this.name = name;
	}
}
class Dog extends Animal{
	public String furColor;
	Dog(String n,String c){
		super(n);
		furColor = c;
	}
}

public class TestCasting {
	public static void main(String[] args) {
		Animal a = new Animal("name");
		Dog d = new Dog("dogname" , "yellow");
		
		System.out.println(a instanceof Animal);
		System.out.println(d instanceof Animal);
		System.out.println(a instanceof Dog);
		
		a = new Dog("bigyellow" , "yellow");
		System.out.println(a.name);
		//System.out.println(a.furname);
		System.out.println(a instanceof Animal);
		System.out.println(a instanceof Dog);
		Dog d1 = (Dog)a;
		System.out.println(d1.furColor);
	}
}

简单来分析一下,其中有两个类,一个是父类Animal类以及继承的子类Dog类,Animal中有一个name的构造方法
Dog中,有furColor的成员变量。再看main类,分别是new了一个Animal类 a,和new了一个Dog类d,并且还附上了属性。
之后通过instanceof来判定,a是否属于Animal类,然后初步调试一下
在这里插入图片描述

这时我们把a来new成了一只Dog类,同时还给他增加了属性,进行一下内存分析
在这里插入图片描述这里在计算机的视角里只能看到a有animal的属性和方法,也就是说它作为Dog的furcolor是无法看到的,总结一下:只能看到父类的,而子类的无法看到
但实际上,a既是一只Dog又是一只Animal
再来进一步的调试程序:
分别输出a的name,a是否为Animal和Dog
在这里插入图片描述

此时如果我们想得到a的furname属性呢?

 System.out.println(a.furname);

这句话是不对的,目前a无法访问furcolor,但是我就想访问a的furColor变量,这里我们采用强制转换,让d1转换成a并指向Dog的属性
Dog d1 = (Dog)a;
这条语句执行完后,那么d1便有了作为Dog的属性
这时可以通过d1.furColor来访问它的属性
这就是对象转型
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-对象转型(casting) 的相关文章

  • 在MS Word 中添加 Mathtype 插件(vbe6ext.olb不能被加载问题 已解决)

    在MS Word中更好的使用Mathtype 本人不提供任何版本的 mathtype 软件安装包 问题背景 尝试安装插件mathtype到word遇到报错三连 1 VBE6EXT OLB不能被加载 2 未知的错误 50001 3 由于宏安全
  • 《牛客网刷题之零基础入门前端之JavaScript》

    目录 ES5 数据类型 基本数据类型检测 检测复杂数据类型 数据类型转换 运算符 阶乘 绝对值 幂 平方根 余数 数组求和 完全等同 或运算 且运算 字符串字符统计 流程控制 返回星期数 内置对象 从大到小排序 大写字符串 对象属性键名 对
  • java反射详解

    一 反射简介 Class类与java lang reflect库一起对反射的概念进行了支持 该类库包含了Field Method及Constructor 这些类型的对象是由JVM在运行时创建的 这样你就可以使用Constructor创建新的
  • VMware Host Only方式联网配置注意

    VMware下安装CentOS虚拟机 网络配置为Host Only方式 将物理网卡分享给VMnet1以保证虚拟机联网 这样不像Bridge方式要占用单独的IP 若是公共访问就要用bridge方式了 也不会向NAT方式一样每次的IP都会变化
  • 《Unity 3D游戏开发 第2版》宣雨松 pdf分享下载

    链接 pan baidu com s 1LfRTGUma 提取码 e2sn 转载于 https juejin im post 5c2b58895188256e047dc2b5
  • 小程序的点击复制功能和长按复制功能

    前言 在小程序中实现点击复制功能和长按复制功能 主要使用wx setClipboardData 小程序的复制功能 官方方法 wx setClipboardData 小程序的复制功能 功能描述 设置系统剪贴板的内容 调用成功后 会弹出 toa
  • SpringBoot:返回响应,统一封装

    说明 接口的返回响应 封装成统一的数据格式 再返回给前端 返回响应 统一封装实体 数据结构如下 代码 package com example core model import io swagger v3 oas annotations m
  • 官网下载git缓慢问题

    问题描述 为上传项目到github git就避免不了需要下载 但是在git官网中下载 1 2kb s的速度 中途还会卡顿 解决方案 在腾讯软件中心下载 几分钟方可下载完成 1 电脑上有电脑管家的话 选择软件管理 搜索git就可以下载 2 直
  • MBR2GPT:将 MBR 转换为 GPT

    几年前 Windows操作系统通常安装在主引导记录 MBR 分区上 但是 随着固件 UEFI 和更大磁盘的安全进步 现在需要 GUID 分区表 GPT 磁盘来利用这些新功能 如果您将系统磁盘配置为 MBR 磁盘 则MB42GPT exe实用
  • logistic回归详解一:为什么要使用logistic函数

    项目github地址 bitcarmanlee easy algorithm interview and practice 欢迎大家star 留言 一起学习进步 从线性分类器谈起 给定一些数据集合 他们分别属于两个不同的类别 例如对于广告数
  • php 判断数组里有大于0 的值_如何比较两个PHP多维数组

    点击蓝字关注我们 每天获取最新的编程小知识 源 php中文网 源 www php cn 判断两个多维数组是否相等 或有哪些元素区别 我们可以通过PHP中array udiff 函数和create function 方法 strcmp 等函数
  • C++ map

    定义一个map对象 map
  • python求水仙花数(用列表生成式)

    水仙花数是指一个n位数 n 3 它的每位上的数字的n次幕之和等于它本身 例如 13 53 3 3 153 求100 999之间所有的水仙花数 i for i in range 100 1000 if i 100 3 i 10 10 3 i
  • LetCode#7给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。JAVA

    每天一道算法题 拒绝当懒狗 一起进步 题目 给你一个 32 位的有符号整数 x 返回将 x 中的数字部分反转后的结果 如果反转后整数超过 32 位的有符号整数的范围 231 231 1 就返回 0 假设环境不允许存储 64 位整数 有符号或
  • MySQL 可重复读隔离级别,完全解决幻读了吗?

    我在上一篇文章中提到 MySQL InnoDB 引擎的默认隔离级别虽然是 可重复读 但是它很大程度上避免幻读现象 并不是完全解决了 解决的方案有两种 针对快照读 普通 select 语句 是通过 MVCC 方式解决了幻读 因为可重复读隔离级
  • 通过URL自动触发Jenkins构建任务

    方法一 进入jenkins安全设置 开启安全域及授权策略 2 在用户设置处生成api token 复制生成的token 3 选择测试项目 配置 构建触发器 选择触发远程构建 将token粘贴在身份验证令牌处 保存 4 在浏览器中输入 htt
  • 联想ideapad700-15isk(小新线下版)黑苹果完美驱动附详细安装过程

    直接上安装的流程 欢迎大家关注我的个人博客 联想ideapad700 15isk 我的配置如下 前期准备 制作安装盘 盘符分配 设置U盘启动 开始安装 添加本地引导 安装完成进入设置 关于clover 划重点 2020年8月30日更新 20
  • ssm框架+Layui整合案例

    业余写得整合案例 想学习的可以来参考 初来乍到 准备工作 Layui tomcat mysql 目录 1 实现的效果图 2 实现代码 2 0 前端代码 2 1 登录页面login jsp 2 2 登录后跳转的主页面 main jap web
  • SQLi LABS Less-22

    第22关使用POST请求提交参数 对账号和密码中的特殊字符执行了转译的操作 难度较大 这一关的重点在于Cookie 用户登录成功后 将base64编码后的用户名保存到Cookie中 点击提交按钮时 会从Cookie中获取用户名 使用base

随机推荐

  • Yum update和upgrade的区别

    Yum update和upgrade的区别 Linux yum中package升级命令有两个分别是 yum upgrade 和 yum update 1 区别 默认情况下 yum update和yum upgrade的功能是完全一样的 都是
  • 基于.NET CORE 3.1的WEB API通过EF CORE连接MySQL

    基于 NET CORE 3 1的WEB API通过EF CORE连接MySQL 注 本文不采用CodeFirst 不使用迁移 1 准备好一个WEB API项目 可以看我之前的文章 2 准备好一个MySQL数据库并创建表 3 引用nuget包
  • 神经网络学习小记录44——训练资源汇总贴

    神经网络学习小记录44 训练资源汇总贴 前言 权值文件 1 迁移学习 传统神经网络 2 目标检测 a keras权重 b pytorch权重 c tensorflow2权重 3 实例分割 4 语义分割 旧版 5 语义分割 新版 a kera
  • nginx请求返回html文件,nginx返回json或者文本格式的方法

    用nginx怎么返回json格式或者文本格式的数据 其实很简单 如下代码 1 返回文本格式 location get text default type text html return 200 hello world 2 返回json格式
  • sublime配置go环境_Win10下sublime text3搭建go语言开发环境--工具篇

    进行 go 语言开发环境的搭建 最近进行了大量的搜索 因为在搭建的过程中遇到了挺多的问题 先介绍搭建的环境 系统 Win10 IDE sublime text3 相关插件 GoSublime 这篇文会介绍如下几个部分 1 下载Golang
  • 知道 Redis RDB 这些细节,可以少踩很多坑

    在使用 Redis 的过程中 你是否遇到过下面这些问题 开启 RDB 落盘 业务频繁出现请求超时 除了 save 和 bgsave 命令 还有哪些操作会触发 RDB 落盘 执行了 flushall 发现 flushall 之前写的数据又冒出
  • 根据传入的年份和月份获取该月属于本年的第几周和每周的开始和结束日期

    function getInfo year month var getInfo function year month var d new Date d setFullYear year month 1 1 var w1 d getDay
  • unity学习笔记-unity(2019)实现与as相互跳转

    Unity学习笔记 Unity 2019 嵌入安卓开发 实现相互跳转 思路 流程 先在unity中添加跳转到安卓的方法 AS配置unity的信息 2021 5 27更新一下 as添加跳转至unity的方法 as添加unity跳转到app的方
  • 8086CPU只有16位寄存器,却可以访问20位的物理地址

    一 背景介绍 Intel 8086是一个由Intel于1978年所设计的16位微处理器芯片 是x86架构的鼻祖 它是以8080和8085的设计为基础 拥有类似的寄存器组 但是数据总线扩充为16位 总线界面单元 Bus Interface U
  • javafx实现登录注册界面

    package sample import JavaBigJob BaseScene import javafx scene Parent import javafx scene layout Pane import javafx appl
  • 前端学习总结:5、Bootstrap

    前端学习总结 5 Bootstrap 文章目录 前端学习总结 5 Bootstrap 1 前言 2 资料 3 下载安装 Bootstrap 4 Bootstrap css 按钮 5 Bootstrap css 表格 6 Bootstrap
  • ZYNQ PL开发流程

    2 ZYNQ PL开发 开发流程 开发使用vivado 流程如下 1 新建工程 工程项目含义 这里简单介绍下各个工程类型的含义 RTL Project 是指按照正常设计流程所选择的类型 这也是常用的一种类型 RTL Project 下的 D
  • 《大话数据结构》-程杰 读书笔记

    认为程序设计的实质是对确定的问题选择一种好的结构 加上设计一种好的算法 可见 数据结构在程序设计当中占据了重要的地位 程序设计 数据结构 算法 要你相信自己一定可以学得会 学得好 既然无数人已经掌握了 你凭什么不行 于每个链表来说 它所占用
  • CentOS中安装docker-compose

    下载安装包 wget https github com docker compose releases download v2 2 3 docker compose linux x86 64 移动到 usr local bin 目录 mv
  • 【VUE3源码学习】nextTick 实现原理

    什么是nextTick 定义 在下次 DOM 更新循环结束之后执行延迟回调 在修改数据之后立即使用这个方法 获取更新后的 DOM 看完这个定义不免心生疑问 下次 DOM 更新循环结束之后是什么时候 执行延迟回调 更新后的 DOM 基于以上问
  • 使用 MMDETECTION 和 LABEL-STUDIO 进行半自动化目标检测标注

    标注数据是一个费时费力的任务 本文介绍了如何使用 MMDetection 中的 RTMDet 算法联合 Label Studio 软件进行半自动化标注 具体来说 使用 RTMDet 预测图片生成标注 然后使用 Label Studio 进行
  • Istio服务网格详解

    一 架构的发展历史 发展历史时间轴 1 单机小型机时代 第一个计算机网络诞生于1969年 也就是美军的阿帕网 阿帕网能够实现与其它计算机进行联机操作 但是早期仅仅是为了军事目的而服务 2000年初 中国的网民大约890万 很多人都不知道互联
  • Deepin设置接受从Windows的远程桌面连接

    信息化时代 网络越来越普及 电脑越来越多 经常会有使用远程桌面操作多台电脑 PC 服务器 虚拟机 云服务器等等 的情形 例如用远程桌面连接Windows服务器 台式机 Xshell连接Linux服务器 台式机 还有更多的工具 包括QQ远程协
  • 推多米诺

    LeetCode 838 推多米诺 一行中有 N 张多米诺骨牌 我们将每张多米诺骨牌垂直竖立 在开始时 我们同时把一些多米诺骨牌向左或向右推 每过一秒 倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌 同样地 倒向右边的多米诺骨牌也会推动竖
  • Java-对象转型(casting)

    对象转型 casting 一个基类的引用类型变量可以指向其子类的对象 一个基类的引用不可以访问其子类对象新增加的方法 属性 方法 可以使用 引用 变量instanceof类名 来判断该引用型变量所指向的对象是否属于该类或该类的子类 子类的对