Java 多态(难)

news/2024/9/21 21:21:49/

1.  即同一方法可以根据发送对象的不同而采用多种不同的行为方式。

2.一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多。

举例说明:新建两个类,Person类和Student类,Student类继承Person类:

一个对象的实际类型是确定的,比如new Student( ) 就一定是Studentnew Person( ) 就一定是Person

但是可以指向的引用类型就不确定了,父类的引用指向子类的类型:

Person和Object都是Student直接和间接的父类,都可以指向子类。

在Person中,写一个run方法:

然后在Application中用s2可以调用run()方法。

结果:

在Student中,重写一个run方法:

然后在Application中用s1和s2调用run()方法。

结果输出都为son!这是因为子类如果重写了父类的方法,自动执行子类的方法;如果子类没有重写,就执行父类的方法

这时,如果在Student类中再写一个eat方法。用s1这个对象肯定可以调用,但是如果想用s2调用eat方法就需要强制转换为Student

对象能执行哪些方法,主要看对象左边的类型,和右边关系不大!都有相同的方法,就会执行子类的方法。

如s1 s2 s3能执行哪些方法,主要看左边的Student  Person  Object类中有哪些方法。

Student中能调用的方法都是自己的或者继承父类的;

Person 是父类型,虽然可以指向子类,但是不能调用子类独有的方法,除非强制转换。

3.注意事项

(1)多态是方法的多态,属性没有多态。

(2)父类和子类之间要有联系,比如String 和Person类型之间就没有关系,会报错ClassCastException!

(3)多态存在的条件需要有继承关系,有方法重写,父类的引用指向子类。如:Father f1 = new Son( );


http://www.ppmy.cn/news/1528554.html

相关文章

maven手动安装jar包到本地仓库时遇到there is no POM in this directory

这几天处理的项目遇到了maven无法下载的jar包,此时要手动加到本地maven仓库中,但是报错: PS D:\> mvn install:install-file -DfileD:\olap4j-0.9.7.309-JS-3.jar -DgroupIdorg.olap4j -DartifactIdolap4j -Dversion0.9.7.309-JS-3 -Dpackaging…

Flink提交任务

第3章 Flink部署 3.1 集群角色 3.2 Flink集群搭建 3.2.1 集群启动 0)集群规划 表3-1 集群角色分配 具体安装部署步骤如下: 1)下载并解压安装包 (1)下载安装包flink-1.17.0-bin-scala_2.12.tgz,将该jar包…

Android源码导入Android Studio

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ 前言 需要先把 Android 源码编译一遍 然后执行下面指令就可以导入android源码了 关于 Android 源码编译可以参考这篇文章【LineageOS源码下载和编译&#xf…

msvcp100.dll丢失怎样修复?分享7款运行库修复工具,简单易上手!

msvcp100.dll丢失怎样修复?在使用电脑的过程中,我们常常会遇到各种错误提示,其中关dll文件丢失的问题尤为常见。例如,msvcp100.dll丢失的错误常常让用户感到烦恼。这种错误通常是由于dll文件被删除、损坏,或是某些软件…

FreeRTOS的递归互斥锁

在FreeRTOS中,递归互斥锁(Recursive Mutex)是一种特殊类型的互斥锁,允许同一个任务多次获取锁而不会导致死锁。配置和使用递归互斥锁的步骤如下: ### 1. 配置FreeRTOS 确保你的FreeRTOS配置文件(通常是Free…

Python中 BeautifulSoup和Selenium 定位元素和获取元素值的方法

在Python中,BeautifulSoup(bs4)和Selenium都是常用的库,用于解析和操作HTML文档。它们各自有不同的定位元素和获取元素值的方法。以下是详细的介绍。 BeautifulSoup(bs4) 以下是一个全面的概述&#xff0…

基于YOLO算法的网球运动实时分析-击球速度测量-击球次数(附源码)

这个项目通过分析视频中的网球运动员来测量他们的速度、击球速度以及击球次数。该项目使用YOLO(You Only Look Once)算法来检测球员和网球,并利用卷积神经网络(CNNs)来提取球场的关键点。此实战项目非常适合提升您的机…

机器学习VS深度学习

机器学习(Machine Learning, ML)和深度学习(Deep Learning, DL)是人工智能(AI)的两个子领域,它们有许多相似之处,但在技术实现和应用范围上也有显著区别。下面从几个方面对两者进行区…