Java多态性
创始人
2024-05-29 16:03:33
0

用一句话概括就是:事物在运行过程中存在不同的状态。
多态的存在有三个前提:

1.要有继承关系
2.子类要重写父类的方法
3.父类引用指向子类对

但是其中又有很多细节需要注意。首先我们定义两个类,一个父类Animal,一个子类Cat。
父类Animal

class Animal{int num = 10;static int age = 20;public void eat(){System.out.println("Animal吃饭");}public static void sleep(){System.out.println("Animal睡觉");}public void run(){System.out.println("Animal跑步");}
}

子类Cat

class Dog extends Animal{int num = 200;static int age = 300;public void eat(){System.out.println("Dog吃饭");}public static void sleep(){System.out.println("Dog睡觉");}public void readBook(){System.out.println("Dog阅读书");}
}

测试类

public static void main(String[] args) {Animal animal  = new Dog();animal.eat();animal.sleep();animal.run();System.out.println(animal.num);System.out.println(animal.age);}

以上的三段代码充分体现了多态的三个前提,即:
1.要有继承关系
Dog类继承了Animal类
2.子类要重写父类的方法
子类重写(override)了父类的两个成员方法eat(),sleep()。其中eat()是非静态的,sleep()是静态的(static)。
3.父类引用指向子类对
测试类中 Animal animal = new Dog();语句在堆内存中开辟了子类(Dog)的对象,并把栈内存中的父类(Animal)的引用指向了这个Cat对象。
在这里插入图片描述
子类Dog重写了父类Animal的非静态成员方法animal.eat();的输出结果为:Dog吃饭。
子类重写了父类(Animal)的静态成员方法animal.sleep();的输出结果为:animal睡觉
未被子类(Dog)重写的父类(Animal)方法animal.run()输出结果为:animal奔跑

总结

  • 成员变量
    编译看左边(父类),运行看左边(父类)

  • 成员方法
    编译看左边(父类),运行看右边(子类)。动态绑定

  • 静态方法
    编译看左边(父类),运行看左边(父类)。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...