Java基础--面向对象编程4(多态)
1.多态的概念
多态是指程序中的同一引用类型,使用不同的实例而执行结果不同的。
同一个类型:一般指父类
不同的实例:不同的子类实例
执行结果不同:针对同一方法执行的结果不同
package cn.sxt05;
public class Test01 {
public static void main(String[] args) {
// 多态
// 同一引用类型
Pet pet = null;
// 父类引用 引用 子类对象
pet = new Dog("二狗",100,0,"土狗");
// 呈现多态
pet.eat();
pet = new Penguin("大脚", 90, 50, Penguin.SEX_FEMALE);
// 呈现多态
pet.eat();
}
}
2.实现多态的步骤
[1] 编写父类
[2] 编写子类,子类一定要重写/实现父类的方法
[3] 运行时,父类类型 引用 子类对象 (Pet pet = new Dog())
3.多态的实现形式
[1]父类类型引用子类对象(本质)
如下代码所示,pet = new Dog() 父类类型引用子类对象,当调用eat方法时,执行的是被子类对象重写/实现的eat方法。
// 多态
// 同一引用类型
Pet pet = null;
// 父类引用 引用 子类对象
pet = new Dog("二狗",100,0,"土狗");
// 呈现多态
pet.eat();
[2]父类作为方法形参实现多态
public void feed(Pet pet) {
System.out.println(this.getName() + "正在喂" + pet.getName());
pet.eat();
}
[3]父类作为方法的返回值实现多态
public Pet adoptPet(int type) {
Pet pet = null;
if(1 == type) {
pet = new Dog();
}else if(2 == type) {
pet = new Penguin();
}else if(3 == type){
pet = new Cat();
}
return pet;
}
4.多态类型转换
在多态中存在两种类型转换,一种是自动类型转换,一种是强制类型转换。
在引用数据类型转换过程中,自动类型转换也称向上类型转换,子类可以自动转换成父类。
Pet pet = null;
pet = new Dog();
强制类型转换也称向下类型转换,父类可以强制转换成子类。
子类类型 引用 = (子类)父类对象,如果要调用子类特有的方法时,一定要强制类型转换,通过instanceof鉴别具体类型。
public void play(Pet pet) {
if(pet instanceof Dog) {
Dog dog = (Dog) pet;
dog.catchFlyDisc();
}else if(pet instanceof Penguin) {
Penguin penguin = (Penguin) pet;
penguin.swimming();
}
}
Java基础--面向对象编程4(多态)的更多相关文章
- Java基础--面向对象编程1(类与对象)
1.类(class)的定义 类是对一组具有相同特征和行为的对象的抽象描述. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物. 2.对象(object)的定义 对象是类的具体实现 ...
- 1.Java基础-面向对象编程思想(封装继承多态接口)
封装: 1.定义:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. 2.封装的目的是:增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的 ...
- Java基础--面向对象编程3(继承)
1.继承的作用 为了提取两个类中公共的代码,可以使用继承抽取重复性的代码到一个公共类中. 这个公共的类称为父类(super class),继承于父类的类称为子类(sub class). 2.java继 ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
- Java基础--面向对象编程2(封装)
1.封装的定义: 封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2. 为什么需要封装?封装的作用和含义? 首先思考一个问题:当我们要 ...
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- JAVA的面向对象编程
JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
随机推荐
- Where Can I Download Full Installers for WebLogic Server
Where can I download full installers for the different versions of WebLogic Server (WLS)? Full insta ...
- su和sudo的区别
首先来说一下su 然后是sudo
- 基于windows环境的Flask网站搭建(mysql + conda + redis)
1下载mysql-installer-community-5.7.24.0.msi (https://dev.mysql.com/downloads/windows/installer/8.0.htm ...
- Kotlin 扩展——省略findViewById
现在 Kotlin 安卓扩展插件能够提供与这些开源库功能相同的体验,不需要添加任何额外代码. import kotlinx.android.synthetic.main.activity_main.* ...
- Oracle 常用Sql 语句
Oracle数据库常常被用作项目开发的数据库之一:有时隔段时间没使用就会忘记一些常用的sql语法,所以我们有必要记录下常用的sql 语句,当我们需要时可以快速找到并运用. 1 创建表空间.创建用户及授 ...
- Express NodeJs Web框架 入门笔记
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速地搭建一个完整功能的网 ...
- IOS跟ANDROID的区别
大家总是会纠结哪个手机系统会更加适合自己,那就由小编我简要介绍一下IOS和安卓的区别吧! 运行机制:安卓是虚拟机运行机制,IOS是沙盒运行机制.这里再说明一下这两者的主要不同之处.安卓系统中应用程序的 ...
- Rx响应式编程
RX响应式编程就是异步数据流编程:单击事件或事件总线;(观察者模式) 有一堆的函数能够创建流,也能将任何流-,也能将任何流进行组合和过滤.一个流能够作为另一个流的输入,能够将两个流合并,可以通过过滤流 ...
- drools规则引擎与kie-wb和kie-server远程执行规则(7.18.0.Final)
最近研究了一下规则引擎drools. 这篇博客带你搭建并运行一个可在线编辑,在线打包,远程执行的规则引擎(drools) 本篇博客同时参考https://blog.csdn.net/chinrui/a ...
- 解释型语言VS编译型语言
前言 计算机不能直接理解除机器语言以外的语言,所以只有把程序员编写的程序翻译成机器语言,计算机才能够执行程序. 将其他语言翻译成机器语言的工具,被称之为:编译器. 编译器的翻译方式有两种:编译和解释. ...