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

Java编译时类型和运行时类型「建议收藏」一、前言最近在做笔试题的时候,才看到有这么一个知识点,查了好几篇博客,在这里记录一下二、是什么Java引用变量有两个类型,一个是编译时类型,还有一个是运行时类型。编译时类型是由声明该变量时使用的类型所决定,运行时类型是由该变量指向的对象类型决定如果两种类型不一致,就会出现多态,因此就会将子类对象之间赋值给父类引用变量,称为向上转型,而不用进行类型转换。如Animal…

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

一、前言

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

二、是什么

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

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

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

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

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

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();
    }

}

结果:

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.net/139845.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • centos7安装图形化界面图文详解

    centos7安装图形化界面图文详解centos7没有图形化操作可能对很多人来说都不太习惯,下面我们来为centos7安装图形化界面,本文以安装GNOME图形化为例写在安装前:如果你的centos7是最小化安装的那默认都是不带XWINDOWS的,那在安装图形化界面之前,你得先安装一下XWINDOWS,这个控制功能 yumgroupinstall”XWindowSystem”1.输入安装命令 yumgro…

    2022年4月28日
    71
  • python自动炒股软件下载_python自动股票交易软件

    python自动炒股软件下载_python自动股票交易软件获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一。鉴于此,我拾起了Python这把利器,开启了网络爬虫之路。本篇使用的版本为python3.5,意在抓取证券之星上当天所有A股数据。程序主要分为三个部分:网页源码的获取、所需内容的提取、所得结果的整理。一、网页源码的获取很多人喜欢用python爬虫的原因之一就是它容易上手。只需以下几行代码既可抓取大部分网页的源码。imp…

    2022年6月19日
    41
  • linux下svn清除非版本控制文件的方法

    linux下svn清除非版本控制文件的方法

    2021年10月20日
    39
  • 你了解System.out.println()的真正含义吗?

    你了解System.out.println()的真正含义吗?在Java编程中,我们常常用 System.out.println(); 来输出字符串,也许我们都已经猜到println()是方法名,但System是什么,out又是什么呢?  其实System是java.lang里面的一个类,如下图:     而out就是System里面的一个静态数据成员,而且这个成员是java.io.PrintStream类的引用。如下图,被关键字static修饰的成员可…

    2025年7月24日
    3
  • Creating Apps With Material Design —— Creating Lists and Cards[通俗易懂]

    Creating Apps With Material Design —— Creating Lists and Cards

    2022年2月7日
    45
  • 自用vim配置文件.vimrc「建议收藏」

    自用vim配置文件.vimrc「建议收藏」.vimrcsetshowmatch”generalsetmouse=vsetnumbersetautochdirsetautoreadsetlaststatus=2″alwayshavestatus-line”setcursorline”hiCursorLinecterm=NONEctermbg=lightbluec

    2022年5月9日
    44

发表回复

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

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