Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java编译时类型和运行时类型「建议收藏」

Java编译时类型和运行时类型「建议收藏」

作者头像
全栈程序员站长
发布于 2022-09-03 06:49:10
发布于 2022-09-03 06:49:10
72900
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

一、前言

最近在做笔试题的时候,才看到有这么一个知识点,查了好几篇博客,在这里记录一下

二、是什么

Java引用变量有两个类型,一个是编译时类型,还有一个是运行时类型

编译时类型是由声明该变量时使用的类型所决定,运行时类型是由该变量指向的对象类型决定

如果两种类型不一致,就会出现多态,因此就会将子类对象之间赋值给父类引用变量,称为向上转型,而不用进行类型转换。如 Animal a = new Bird(),其中引用变量 a 的编译时类型是 Animal,运行时类型是 Bird,两者不一致,因此出现多态

当使用该对象引用进行调用的时候,有这么一条规则,对象调用编译时类型的属性和运行时类型的方法

我们直接看一个例子来验证这句话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person { 
   
    public String name;

    public Person() { 
   
        name = "person";
    }

    public void show() { 
   
        System.out.println("person show");
    }
}

class Woman extends Person { 
   
    public String name;

    public Woman() { 
   
        name = "woman";
    }

    public void show() { 
   
        System.out.println("woman show");
    }
}

public class TestDemo { 
   

    public static void main(String[] args) { 
   
        Person person = new Person();
        System.out.println(person.name);
        person.show();

        System.out.println();

        Person person1 = new Woman();
        System.out.println(person1.name);
        person1.show();

        System.out.println();

        Woman woman = new Woman();
        System.out.println(woman.name);
        woman.show();
    }

}

结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
person
person show

person
woman show

woman
woman show

从结果可以看出,第一条语句 person 引用调用的属性属于 Person 类,person 引用调用的方法还是 Person 类;之后以此类推

三、参考

https://blog.csdn.net/snow_7/article/details/51579278 https://blog.csdn.net/qq_29513537/article/details/60765552 https://blog.csdn.net/qq_23419401/article/details/52064871#java

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java-多态
版权声明: https://blog.csdn.net/li_xunhuan/article/details/88932792
Fisherman渔夫
2019/07/31
5220
Java-多态
Java 编译时多态和运行时多态
根据何时确定执行多态方法中的哪一个,多态分为两种情况:编译时多态和运行时多态。如果在编译时能够确定执行多态方法
全栈程序员站长
2022/09/01
7280
Java 编译时多态和运行时多态
Java程序设计(面向对象)- 三大支柱「建议收藏」
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 介绍:
全栈程序员站长
2022/08/04
3120
Java程序设计(面向对象)- 三大支柱「建议收藏」
编译时多态和运行时多态
多态分为两种情况:编译时多态和运行时多态。 如果在编译时能够确定执行多态方法称为编译时多态,否则称为运行时多态。
用户7886150
2021/02/13
6260
【Java 基础】:三大特征之多态
【Java 基础】类和对象(构造&this&封装&static&代码块)-CSDN博客
IsLand1314
2024/10/15
1710
【Java 基础】:三大特征之多态
JAVA基础 | java基础4(JAVA继承、JAVA多态、抽象类、接口)
super 表示使用它的类的父类。super 可用于: 1.引用父类对象的成员变量 super.age;
网络技术联盟站
2019/10/13
1.3K1
java运行时异常和非运行时异常区别_常用的运行时异常
Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。Java中的异常分为两大类:错误Error和异常Exception,Java异常体系结构如下图所示:
全栈程序员站长
2022/11/11
1.3K0
Java面向对象三大特性(封装、继承、多态)
OOP 语言:也就是面向对象编程。 面向对象的语言有三大特性:封装、继承、多态。三大特性是面向对象编程的核心。下面就来介绍一下面向对象的三大特性。 如果想了解面向对象可以看一下这一篇博客类和对象
全栈程序员站长
2022/09/17
3710
Java面向对象三大特性(封装、继承、多态)
【编程基础】如何理解java中的多态
大家都知道Java面向对象有几大特征:抽象、封装、继承和多态,Java的这些特性让Java变得很强大,可以很轻松的胜任比较复杂的项目开发。今天重点给大家说说多态这个特性。 多态总结起来发生的场景就是两类: 1、对象运行时确定是子类还是父类; 2、方法运行时确定调用同名的哪个方法; 也就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行
程序员互动联盟
2018/03/14
8220
【编程基础】如何理解java中的多态
理解静态绑定与动态绑定
一个Java 程序要经过编写、编译、运行三个步骤,其中编写代码不在我们讨论的范围之内,那么我们的重点自然就放在了编译 和 运行这两个阶段,由于编译和运行阶段过程相当繁琐,下面就我的理解来进行解释:
cxuan
2019/06/03
2K0
JAVA基础(38) java四大特性理解(封装、继承、多态、抽象)
JAVA基础(38) java四大特性理解(封装、继承、多态、抽象)
Java架构师必看
2021/06/16
2.5K0
Java运行时多态性:继承和接口的实现
image.png Java是面向对象的语言,而运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,下面就继承和接口实现两方面谈谈java运行时多态性的实现。 一、通过继承中超类对象引用变量引用子类对象来实现 举例说明: //定义超类superA class superA { int i = 100; void fun() { Sys
java达人
2018/01/31
1.9K0
Java运行时多态性:继承和接口的实现
夯实Java基础系列23:一文读懂继承、封装、多态的底层实现原理
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/10/09
1.4K0
Java基础知识面试题(2020最新版)
Java面试总结汇总,整理了包括Java基础知识,集合容器,并发编程,JVM,常用开源框架Spring,MyBatis,数据库,中间件等,包含了作为一个Java工程师在面试中需要用到或者可能用到的绝大部分知识。欢迎大家阅读,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。文章持续更新中…
Java架构师必看
2020/04/10
1.1K0
Java面向对象的三大特征以及理解
Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取。下面我举一个简单的封装例子
全栈程序员站长
2022/09/17
4660
JavaSE学习总结(五)——封装,继承,多态很简单
根据文章内容撰写摘要总结。
张果
2018/01/04
1.3K0
JavaSE学习总结(五)——封装,继承,多态很简单
JAVA零基础小白学习教程之day08_接口&多态
由于多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,当然可以把Cat对象和Dog对象,传递给方法。当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果自然与showCatEat、showDogEat方法一致,
张哥编程
2024/12/13
990
JAVA零基础小白上手教程day08-JAVAOOP面向对象
<img src="asseits/龙生九子.jpg" alt="龙生九子" style="zoom: 67%;" />
张哥编程
2024/12/13
900
Java——Java面向对象
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。
说故事的五公子
2020/04/13
2.4K0
【Java学习笔记之十三】初探Java面向对象的过程及代码实现
理解Java面向对象的重要知识点: 一、 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的、红色的、白色的... 这里,汽车设计图就是我们说的类(clas
Angel_Kitty
2018/04/09
8290
【Java学习笔记之十三】初探Java面向对象的过程及代码实现
推荐阅读
相关推荐
Java-多态
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验