多态是Java面向对象的一个重要特征。多态就是不同的对象对同一个事物做出的不同反应。方法重写是实现多态的基础.

1.向上转型

父类引用指向子类

向上转型的语法:

<父类型> <引用变量名> =new <子类型>()

public class Animol {public void eat(){System.out.println("动物吃饭");}
}class Dog extends Animol{public void eat() {System.out.println("狗吃骨头");//重写父类的eat}public void what(){System.out.println("守护院子");//狗独有的方法}
}class Cat extends Animol{public void eat(){System.out.println("猫吃鱼");//重写父类的eat}public void shou(){System.out.println("猫捉老鼠");//猫独有的方法}
}
Animol animol=new Cat();(这里就是向上转型)
animol.eat();
Animol animol1=new Dog();(这里就是向上转型)
animol1.eat();

结果是调用了子类的重写的eat

猫吃鱼
狗吃骨头

我们发现无法调用子类独有的发法

子类转换为父类时的规则:

1.将一个父类的引用指向子类对象称为向转型,系统自动类型转换

2.此时通过父类引用变量调用方法时,子类覆盖或继承了父类的方法,不是父类的方法

3.此时无法通过父类的引用变量调用子类特有的方法

3.向下转型

当向上转型发生后,将无法调用子类特有的方法,但是弱国需要调用子类特有的方法,可以通过把父类转换为子类的实现

将一个指向子类对象的父类引用给一个子类引用,即父类类型转换为子类类型,称为向下转型,此时必须要强制类型转换

向下类型转换的语法:

<子类型> <引用变量名> =(子类类型)<父类类型的引用变量>

这时我们可以用向下转型来调用子类独有的方法

Cat cat= (Cat) animol;(没有new)
((Cat) animol).shou();

这是结果时;猫捉老鼠

成功调用

这时我们试试Dog类

Dog dog= (Dog) animol;

我们发现没有提示报错但运行出错了

Exception in thread "main" java.lang.ClassCastException: paage1.Cat cannot be cast to paage1.Dogat paage1.Test.main(Animol.java:40)

我们引入一个关键字

4.instanceof运算符

在向下转型的过程中,如果不是转换为真实的子类类型,会出现异常

简单来说此时的animol已经是cat类了

instanceof就可以帮助我来判段是否是真实的子类类型。使用instanceof 时,对象类型必须和instanceof后面的参数所指定的类有继承关系,否则会出现编译错误

如下代码:

if (animol instanceof Cat){((Cat) animol).shou();}else if (animol instanceof Dog){((Dog) animol).what();}

结果是:猫捉老鼠

如果想调用Dog独有的方法需要:

Animol animol1=new Dog();
Dog dog= (Dog) animol1;
((Dog) animol1).what();

就是在new一个animal1

5.使用父类作为方法的形参

使用父类作为方法的参数,是java中实现和使用多态的主要方式

class Host{public void Leteat(Animol animol){animol.eat();}}
class Test2{public static void main(String[] args) {Host host=new Host();Animol animol;animol=new Dog();host.Leteat(animol);animol=new Cat();host.Leteat(animol);}}

调用父类来控制子类

2.使用父类作为方法的返回值(了解即可

使用父类作为方法的返回,也是java中实现和使用多态的主要方式

Java多态(简单介绍)相关推荐

  1. java多态简单例子6_Java_6、面向对象——继承和多态

    继承 •继承是面向对象编程的三大特征之一,是一种基于已有类来创建新类的机制.由继承而得到的类称为子类(或派生类),被继承的类称为父类(或超类). •Java中每个类只允许有一个父类.语法如下:clas ...

  2. java enumerator_简单介绍java Enumeration

    Enumeration接口 Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构得到连续数据的手段.例如,Enumeratio ...

  3. Java虚拟机简单介绍

    安装jdk之后一般都会安装jre,在jre中就包含有Java虚拟机(jvm). jvm是虚拟出来的,类似于简单的系统,有自己的内存管理,寄存器,程序计数器cp,环境指针和栈指针等. 1.先说Java虚 ...

  4. 【西行】Java 编程语言简单介绍

    J3 - 白起 Java(Java发展史 # 笔记) 1.Java 发展史 Java 语言的诞生并不是精心策划.制作,最后产生出来的,因为当时的开发者并没有想创造出世界上 如此伟大的编程语言之一. 时 ...

  5. java castor_Castor简单介绍

    本节摘要:本节主要介绍Castor插件的使用. preparation 1.castor简介 castor是一种将java对象和XML自动绑定的开源软件.它可以在java对象.XML文本.SQL数据表 ...

  6. Java中间件简单介绍

    中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必再为程序在不同系统软件上的移植而重复工作,从而大大减少了技术上的负担 ...

  7. java数组简单介绍以及其方法

    小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...

  8. Java异常简单介绍

    本文收录在猪哥GitHub:https://github.com/pig6/Java 中,本项目收集一线大厂面试.实战.Java学习路线等. 一.异常产生的原理 JVM针对程序运行监测出的异常创建个异 ...

  9. java transient简单介绍

    我们都知道一个对象仅仅要实现了Serilizable接口,这个对象就能够被序列化,java的这样的序列化模式为开发人员提供了非常多便利,我们能够不必关系详细序列化的过程,仅仅要这个类实现了Serili ...

  10. JAVA设计模式--简单介绍

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介 Design pattern 是众多软件开发人员经过漫长的试验和错误总结出来的在软件开发过程中面临一般问题的解决方 ...

最新文章

  1. 参与有奖 | Arthas 第 5 期征文活动火热开启!(内附第四期中奖名单)
  2. 历史最牛 多页切换TabHost,给大家参考。
  3. 高德地图android4,Android高德之旅(4)我的位置
  4. 学习Vue.js实战(一)
  5. snmp 获取设备类型_SNMP开发系列(三)SNMP Agent的实现
  6. 微軟专为Visual Studio 2019设计出一套容器工具擴充套件
  7. mysql的comment_mysql的comment怎么用
  8. 印象笔记打开错误_印象笔记新增桌面便签功能
  9. P1725 琪露诺 题解(单调队列)
  10. 生物物种数据库_一个半机械人的物种
  11. 启明星数据库批量备份与还原工具
  12. 前端vue生成二维码,再合成海报图片
  13. ansible中的file、cron、debug、template、lineinfile、blockinfile模块的介绍和使用
  14. 树莓派如何连接WiFi
  15. 零基础学习软件测试必看的python之基础语法
  16. Vscode Opencv4.5.2环境搭建
  17. 部分图像压缩技术的优缺点以及应用
  18. STP的安全特性详解与环路保护机制
  19. Javascript基础之-var,let和const深入解析(二) - 三者的规范描述、临时死区 (TDZ)、双定义
  20. 计算机专业征兵,计算机应用工程系征兵宣传大会顺利召开──保家卫国,学子应征...

热门文章

  1. Kanzi Studio介绍与安装注意
  2. sas连接mysql的server_超简单实现SAS软件 连接 SQL Server
  3. node.js目录结构
  4. 毕业设计Java超市积分管理系统源码资料+项目视频说明+项目截图
  5. Python安装pylab模块
  6. 哪位人兄..做过flex 打开 DWG DWF 文件程序
  7. Android编码规范_优码客软件
  8. Norton推出基于云查杀免费小工具Norton Power Eraser
  9. Linux LCD屏幕驱动调参实操
  10. JavaScript中的构造函数、原型和实例