面向对象-多态

概念

多态是指同一行为,具有多个不同表现形式
多态是除封装、继承之后面向对象的第三大特征。
多态是出现在继承或者实现关系中的

使用多态有什么前提
  1. 要有继承或实现关系
  2. 要有方法的重写
  3. 要有父类引用指向子类对象
    子类对象是可以赋值给父类类型的变量。例如Animal是一个动物类型,而Cat是一个猫类型。Cat继承了Animal,Cat对象也是Animal类型,自然可以赋值给父类类型的变量。
多态的成员访问特点:
  • 成员变量:编译看父类,运行看父类
  • 成员方法:编译看父类,运行看子类
多态体现的格式:
父类类型 变量名 = new 子类/实现类构造器;
变量名.方法名();
多态的利与弊:

弊端:

只能调用父类有的方法------ 编译看左边,运行看右边,不能使用子类的特有成员,但是可以使用向下转型

好处:

左边写父类,右边写子类,提高代码的扩展性,多态会调用右边子类的重写方法

引用类型转换:

为什么要转型

使用多态方式调用方法时,不能调用子类拥有,而父类没有的方法,想要调用子类特有的方法必须向下转型。

向上转型

从子到父,父类引用指向子类对象就是向上转型,多态的默认就是向上转型,
原因:父类大于子类,就好像int转long一样,所以是自动的

格式:

父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();

向下转型:

从父到子,父类引用转为子类对象就是向下转型
父类转向子类就好像是long转int类型一样,是大转小,就像基本数据类型一样需要强制转换
说明:但是一般使用多态也就是使用共性的方法,一定要子类特有的方法还是直接创建子类对象比较方便,向下转型麻烦。

格式:

子类类型 变量名 = (子类类型) 父类变量名;:Aniaml a = new Cat();
Cat c =(Cat) a;

代码演示:

//  父类
abstract class Animal {abstract void eat();
}//  猫类
class Cat extends Animal {public void eat() {System.out.println("吃鱼");}//  猫特有的方法抓老鼠public void catchMouse() {System.out.println("抓老鼠");}
}//  狗类
class Dog extends Animal {public void eat() {System.out.println("吃骨头");}//  狗特有的方法看家public void watchHouse() {System.out.println("看家");}
}

测试类:

    public static void main(String[] args) {// 向上转型Animal a = new Cat();a.eat(); // 调用的是 Cat 的 eat// 向下转型Cat c = (Cat) a;c.catchMouse(); // 调用的是 Cat 的 catchMouse}
instanceof:

instanceof关键字可以给引用变量做类型的校验
ClassCastException:如果被转的引用类型变量,对应的实际类型和目标类型不是同一种类型,那么在转换的时候就会出现ClassCastException,使用instanceof可以解决

格式:

变量名 instanceof 数据类型
如果变量属于该数据类型或者其子类类型,返回true。
如果变量不属于该数据类型或者其子类类型,返回false。

代码演示:

    public static void main(String[] args) {// 向上转型Animal a = new Cat();a.eat(); // 调用的是 Cat 的 eat// 向下转型if (a instanceof Cat) {Cat c = (Cat) a;c.catchMouse(); // 调用的是 Cat 的 catchMouse} else if (a instanceof Dog) {Dog d = (Dog) a;d.watchHouse(); // 调用的是 Dog 的 watchHouse}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 区位码字符,php汉字如何转区位码

php汉字转区位码的方法:首先创建一个PHP示例文件;然后通过“sprintf("%02d%02d",ord($t1[0])-160,ord($t1[1])-160);”方法实现汉字转区位码即可。推荐:《PHP视频教程》PHP中实现汉字转区位码应用源码实例解析PHP里如何实现汉字转区…

ssh(struts,spring,hibernate)开发的初步集成01--依赖

一.概念 SSH 通常指的是 Struts2 做前端控制器,spring 管理各层的组件,hibernate 负责持久化层。 SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,MyBatis 负责持久化层。 二.构建流程 创建maven工程...在pom.xml文件…

频谱扩展 matlab,简单的直接扩展频谱通信系统仿真分析

随着通信技术的迅猛发展,扩展频谱通信技术的优点已经越来越明显并被接受,并在各个领域得到了广泛的应用。同时随着计算机技术和仿真技术的日益发展和应用,如何应用一些方便、友好的软件对通信系统进行直观的模型仿真,并进行仿真结…

内部类怎么用

内部类: 在一个类中定义一个类。 举例:在一个类A的内部定义一个类B,类B就被称为内部类 // 格式: class 外部类名{ 修饰符 class 内部类名{ } } class A{public class B {}}内部类的访问特点: 内部类可以直接访问外部类…

一个css3特效

转载于:https://www.cnblogs.com/xiongwei2017/p/6877393.html

matlab保存格式可以用cad打开文件,怎么将TXT文件导入CAD中生成图形

我们可以先把TXT文件转换成WORD或是EXCEL表格里。然后再把转换后的WORD或是EXCEL表格导入到CAD图纸中。这里以迅捷CAD编辑器为例,演示如下:步骤一:还是需要在电脑桌面上安装迅捷CAD编辑器。并进入到软件的操作界面。步骤二:双击打…

[Hnoi2006]马步距离

1285: [Hnoi2006]马步距离 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 36 Solved: 16[Submit][Status][Web Board]Description 在国际象棋和中国象棋中,马的移动规则相同,都是走“日”字,我们将这种移动方式称为马步移动。如右图所示&…

包装类(自动拆箱与自动装箱)

概念: 基本数据类型有8种.基本数据类型效率高,但是功能及其有限,只能做加减乘除运算.为了对基本数据类型进行更多的操作,Java为每种基本数据类型提供了对应的类(包装类), 作用: 用于基本数据类型与字符串之间的转换 将基本数据类型封装成对象…

php scrscriptipt,XSS挑战之旅闯关笔记

环境自己搭建~~好嚣张:1.http://127.0.0.1:8024/xss/level1.php?nametest 这是URL 看到后面name有参数传递,不多想直接尝试xss。没有任何过滤。payload :http://127.0.0.1:8024/xss/level1.php?name2.http://127.0.0.1:8024/xss/level2.ph…

CentOS7 防火墙规则 (firewalld)

1、firewalld的基本使用启动: systemctl start firewalld查看状态: systemctl status firewalld 停止: systemctl disable firewalld禁用: systemctl stop firewalld2.systemctl是CentOS7的服务管理工具中主要的工具,它…

matlab图像信息熵交叉熵,【机器学习】信息量,信息熵,交叉熵,KL散度和互信息(信息增益)...

首先先强烈推荐一篇外文博客Visual Information Theory这个博客的博主colah是个著名的计算机知识科普达人,以前很是著名的那篇LSTM讲解的文章也是他写的。这篇文章详细讲解了信息论中许多基本概念的前因后果,并且很是的直观用了大量的图片,和…

第2章第1讲数据类型及常量变量

#include"stdio.h"main() {printf("I love music!\n");printf("the music is \"D:\\music\\love.mp3\".\n");} #include "stdio.h" #define PI 3.14 //符号常量 main() {float r,area; …

java嵌套对象,java – 从嵌套流中收集一组对象

我有一个场景,我有两个for循环,一个嵌套在另一个.在内部循环中,对于每次迭代,我都有创建特定类型的新实例所需的信息.我想将代码从for循环更改为使用流,因此我可以将所有对象收集到ImmutableSet中.但是,我无法制作一个编译和工作的版本.下面的示例程序说明了我最接近的尝试.它编…

v$session v$session_wait

(1)v$session v$session视图记录了当前连接到数据库的session信息 ColumnDescriptionSADDRsession addressSIDSession identifierSERIAL#session序列号,当某个session结束,另一个新开始的session使用了前者的sid,则此数值自加1AUDSIDauditing…

数据结构有哪些

概念: 数据结构 : 数据用什么样的方式组合在一起。 数据结构是计算机存储数据的方式,指相互之间存在一种或多种特定关系的数据元素集合 常见数据结构: 数据存储的常用结构有:栈、队列、数组、链表和红黑树。 栈: stack…

matlab自考本科真题,行政管理学自考专科试题及答案

参考答案如下检查髌腱炎患者时可以发现()。A、行政学自股四头肌萎缩B、渗出C、髌反射低下D、Mcmurray试验时有卡嗒声/疼痛患者,管理男,30岁,患甲状腺功能亢进症,突然出现双下肢不能动。检查:双下肢膝腱反射…

php 关于日期的知识总结

1.UNIX时间戳 time() echo time(); 2.UNIX时间戳转换为日期用函数: date() 一般形式:date(Y-m-d H:i:s, 1156219870); 即 echo date(date(Y-m-d H:i:s, time())); 或 $showtime date(Y-m-d H:i:s,time()); 显示结果: 3.日期转换为UNIX时间…

php template strring,PHP字符串函数

<?php $str "THIS is a beautiful world!";//$newstr strstr($str,"is"); //区分大小写的//stristr 表示 $str里面第一次出现"is"的位置和之后的字符串//$newstr stristr($str,"is"); //不区分大小写$newstr stristr($str,&…

Java Calendar 类的时间操作

Java Calendar 类时间操作&#xff0c;这也许是创建和管理日历最简单的一个方案&#xff0c;示范代码很简单。 演示了获取时间&#xff0c;日期时间的累加和累减&#xff0c;以及比较。 原文地址&#xff1a;blog.csdn.NET/joyous/article/details/9630893 注意事项&#xff1a…

Java的异常入门

概念&#xff1a; 异常就是程序出现了不正常的情况&#xff0c;会导致JVM非正常停止&#xff0c;语法错误不算异常体系中 异常体系&#xff1a; 编译时异常&运行时异常&#xff1a; 虚拟机默认处理方式&#xff1a; 代码中出现异常&#xff0c;程序会先判断有没有处理异常的…