首页 > 编程语言 >java多态的编译执行

java多态的编译执行

时间:2024-09-06 23:21:18浏览次数:10  
标签:静态方法 Zi 多态 编译 println java 复写 Fu

多态执行

“编译看左边,运行看右边”

“成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边。”意思是:当父类变量引用子类对象时(Fu f = new Zi();),

在这个引用变量f指向的对象中,他的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写)。

package test02;

/**
 * @Author: bjb
 * @CreateTime: 2024-09-02
 */


class Fu {

    int num = 5;

    static void method4() { //静态成员方法

        System.out.println("fu method_4");

    }

    void method3() {        //非

        System.out.println("fu method_3");

    }

}

class Zi extends Fu {

    int num = 8;

    static void method4() {

        System.out.println("zi method_4");

    }

    void method3() {

        System.out.println("zi method_3");

    }

}

class Test02 {

    public static void main(String[] args) {

        Fu f = new Zi();

        System.out.println(f.num);//与父类一致

        f.method4();//与父类一致

        f.method3();//编译时与父类一致,运行时与子类一致

        Zi z = new Zi();

        System.out.println(z.num);

        z.method4();

        z.method3();

    }

}

个人分析:

Fu f = new Zi();----------首先了解变量F到底是什么,把这句子分2段:Fu f;这是声明一个变量f为Fu这个类,那么知道了f肯定是Fu类。然后我们f=newZi();中建立一个子类对象赋值给了f,结果是什么??

结果是,拥有了被Zi类函数覆盖后的Fu类对象----f------。

-------------------------------------------也就是说:

只有子类的函数覆盖了父类的函数这一个变化,但是f肯定是Fu这个类,也就是说f不可能变成其他比如Zi这个类等等(突然f拥有了Zi类特有函数,成员变量等都是不可能的)。所以f所代表的是函数被复写后(多态的意义)的一个Fu类,而Fu类原来有的成员变量(不是成员函数不可能被复写)没有任何变化----------------获得结论:A:成员变量:编译和运行都看Fu。

但是f的Fu类函数被复写了。--------------获得结论:B:非静态方法:编译看Fu,运行看Zi

对于静态方法:编译和运行都看Fu!!

其实很简单,首先我们要理解静态情况下发生了什么?

----------------当静态时,Fu类的所有函数跟随Fu类加载而加载了。也就是Fu类的函数(是先于对象建立之前就存在了,无法被后出现的Zi类对象所复写的,所以没发生复写,那么获得:C:静态方法:编译和运行都看Fu。

标签:静态方法,Zi,多态,编译,println,java,复写,Fu
From: https://blog.csdn.net/m0_64208396/article/details/141867275

相关文章

  • Java 线程池:参数、配置和常见问题以及案例示范
    Java线程池:参数、配置和常见问题以及案例示范线程池是提高系统性能和资源利用率的关键组件之一。通过合理配置线程池,可以有效地管理线程资源,避免系统过载,提升并发处理能力。本文将以电商交易系统为案例,详细讲解Java线程池的参数、配置、以及常见问题和解决方案以及在spr......
  • [Java并发]线程池拒绝策略的使用场景
    Java线程池中的四种拒绝策略在处理任务过载或资源不足时非常有用。每种策略适用于不同的场景:AbortPolicy(默认策略)描述:当线程池无法接受新任务时,该策略会直接抛出RejectedExecutionException,阻止任务被执行。使用场景:适用于希望立即得知线程池无法处理更多任务的场......
  • Java毕业设计-基于SSM框架的高校外事管理系统项目实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • Java毕业设计-基于SSM框架的图书借阅管理系统项目实战(附源码+论文)
    大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。......
  • 基于Java的体育健身管理系统的设计与实现(SpringBoot+Vue2+MySQL)
    文章目录前言详细视频演示论文参考具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我自己的网站([小蔡coding](https://xiaocaicoding.cn/))演示视频和源码展示一对一指导服务代码参考数......
  • JAVA课程设计----电脑销售系统
    四、详细设计1、电脑(Computer)类类名:Computer继承父类:无实现接口:无概述:定义电脑属性属性及说明:brand(品牌)、price(价格)、inventory(库存);用来设置电脑的品牌,价格,库存方法及说明:无2、顾客(Customer)类类名:Customer继承父类:无实现接口:无概述:定义顾客属性属性及说明:na......
  • Python中的方法重写与多态:解锁编程的无限可能
    在编程的世界里,灵活性与扩展性往往是衡量一个语言是否强大、易于维护的关键指标。Python,作为一种被广泛使用的高级编程语言,不仅以其简洁易读的语法赢得了众多开发者的喜爱,更因其支持多种面向对象特性而备受青睐。其中,“方法重写”与“多态”便是两个核心概念,它们不仅能够极......
  • Python中的方法重写与多态:解锁编程的无限可能
    在编程的世界里,灵活性与扩展性往往是衡量一个语言是否强大、易于维护的关键指标。Python,作为一种被广泛使用的高级编程语言,不仅以其简洁易读的语法赢得了众多开发者的喜爱,更因其支持多种面向对象特性而备受青睐。其中,“方法重写”与“多态”便是两个核心概念,它们不仅能够极大地提高......
  • 记录Java秋招面经(网上找的)
    1.Mysql的存储机制,怎么落到库里面的?当数据插入MySQL时,首先数据修改会在内存中的BufferPool中完成,同时记录写入RedoLog以保证事务的持久性。事务提交时,日志会被刷入磁盘,确保数据可以恢复。修改后的数据页暂时不会立即写入磁盘,而是由后台线程异步将内存中的脏页(已修......
  • JAVAEE初阶第六节——网络编程套接字
    系列文章目录JAVAEE初阶第六节——网络编程套接字文章目录系列文章目录JAVAEE初阶第六节——网络编程套接字一.网络编程基础1.为什么需要网络编程2.什么是网络编程3.网络编程中的基本概念3.1发送端和接收端3.2请求和响应3.3客户端和服务端4.常见的客户......