多态

1.概念:一个事物具有多种状态 polymorphic对象的多态性:同一个对象,可以具有不同的名称,同一个对象,有不同的类型的引用指向他。本质:同一个物体,有不同的名称和描述。类型的多态性:同一个类型,可以有不同的子类实现。本质:同一个名字和描述,在不同的场景有不同的真实实现。
2.多态的前提:要有子父类的继承关系,实现关系要有方法的重写父类引用指向子类对象

多态种成员变量的访问特点

编译看左边,运行看左边
编译时,看=左边的引用类型中是否有该变量的定义
运行时,看=左边的引用类型中该变量的赋值

多态种成员方法的访问特点

编译看左边,运行看右边
编译时,看=左边的引用类型中是否有该方法的定义,如果有,编译成功,如果没有,就编译失败。
运行时,看=右边的对象类型中是如何实现该方法的,运行结果是子类中重写后的方法实现

向上向下转型

向上转型:子类引用指向子类对象----正常情况父类引用指向子类对象----向上转型
缩小了对象的访问权限,只能访问父类中定义的内容。
向下转型:让子类对象的父类引用恢复成子类引用子类类型  引用名称 = (子类类型)父类引用名称
恢复了子类类型原本就有的访问范围
package com.DaYu;public class Demo01 {public static void main(String[] args) {Animal_1 an = new Dog_1();//多态中访问成员变量System.out.println(an.name);//动物   结果看左边,即父类
//      System.out.println(an.sex); //父类中没有sex属性,所以访问不了//多态中访问成员方法   编译看左边,运行看右边an.eat();// 狗吃肉    结果看右边
//      an.sleep(); //无法访问子类中特有的方法//向下转型Dog_1 d1 = (Dog_1)an;System.out.println(d1.name);//小狗System.out.println(d1.sex);//公d1.eat();//狗吃肉d1.sleep();//睡觉}
}class Animal_1 {String name = "动物";int age = 4;public void eat() {System.out.println("吃东西");}
}class Dog_1 extends Animal_1 {String name = "小狗";String sex = "公";@Overridepublic void eat() {System.out.println("狗吃肉");}//子类中特有的方法public void sleep() {System.out.println("睡觉");}
}

多态的好处

1.提高的代码的可扩展性
2.忽视了子类类型之间的差异在方法的参数列表中,可以定义父类类型的引用,将来调用方法的时候,所有子类类型的对象,都可以作为实际参数。在方法体中,使用父类类型的引用指向子类的对象,也能提高代码的扩展性,代码编译阶段,无法知道对象的具体的子类类型,需要使用父类引用,操作不知道子类类型的数据。
package com.DaYu;import java.util.Scanner;public class Demo02 {public static void main(String[] args) {JuiceMachine  jm = new JuiceMachine();Apple a = new Apple();jm.makeJuice(a);WaterMelon wm = new WaterMelon();jm.makeJuice(wm);Fruit fruit = new Apple();jm.makeJuice(fruit);Fruit fruit1 = new Orange();jm.makeJuice(fruit1);}
}
class JuiceMachine {//参数为父类引用,免去了定义以各种水果为参数的繁琐public void makeJuice(Fruit fruit) {fruit.flow();}}class Fruit{public void flow() {System.out.println("流出果汁");}
}class Apple extends Fruit{public void flow() {System.out.println("流出苹果汁");}
}class WaterMelon extends Fruit{public void flow() {System.out.println("流出西瓜汁");}
}class Orange extends Fruit{public void flow() {System.out.println("流出橙子汁");}
}
package com.DaYu;
public class Demo1 {public static void main(String[] args) {int a = 50;Animal animal = getAnimal(a);//父类引用指向子类对象 忽视了子类之间的差异 }public static Animal getAnimal(int money) {if (money>0&&money<=20) {return new Dog();}else if ( money<=30) {return new Cat();}else if (money<=50) {return new Duck();}else {return new Sheep();}} }
//定义一个动物类
class Animal {}
// 定义一个狗类 继承 动物类
class Dog extends Animal {}
//定义一个猫类 继承 动物类
class Cat extends Animal {}class Sheep extends Animal{}class Duck extends Animal{}

Java基础---认识多态相关推荐

  1. Java基础之多态深入解析

    Java基础之多态深入解析 多态的基本概念 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性.简单的说:就是用基类的引用指向子类的对象. 多态的优点 消除类型之间的耦合关系 ...

  2. java基础之多态的详细解释_JAVA基础之多态

    下面我为大家讲解一下JAVA基础之多态,希望大家喜欢. 多态就是事物存在的多种形态,比如你在大街上看见一只藏獒,你可以说这只藏獒真凶猛,也可以说这只狗真凶猛,还可以说这个动物真凶猛,以上三种说法其实都 ...

  3. Java基础十一--多态

    Java基础十一--多态 一.多态定义 简单说:就是一个对象对应着不同类型. 多态在代码中的体现: 父类或者接口的引用指向其子类的对象. 1 /* 2 3 对象的多态性. 4 5 class 动物 6 ...

  4. 【Java基础】多态、equals、造型cast、访问修饰符(public、protected、default、private)、static、final

    1.面型对象–多态 多态的概念:多态性就是指同样的消息被类的不同的对象接收时导致的完全不同的行为的一种现象.这里的消息即对类成员函数的调用. 实现上面调用宠物叫,每种宠物有各自的叫声 public c ...

  5. 【Java基础】多态

    首先先来个总结: 什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消 ...

  6. Java基础 | 多态

    java面向对象三大特征:封装.继承.多态. 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态. 多态的转型: 向上 ...

  7. Java基础12 多态

    作者:Vamei 出处:http://www.cnblogs.com/vamei 我们之前使用类创造新的类型(type),并使用继承来便利我们创建类的过程.我将在这一讲中深入类型,并介绍多态(poly ...

  8. Java基础(多态实现原理)

    Java 多态实现原理 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现. 现实中,比如我们按下 F1 ...

  9. Java 基础:多态

    目录 什么是多态: 多态在编程中的形式 1.父类类型做形参 2.父类类型做属性 3.父类类型做返回值 多态中的成员 什么是多态: 1.面对对象的三大特征:封装.继承.多态.从一定角度来看,封装和继承都 ...

最新文章

  1. 机器学习(2)--感知机
  2. YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie...
  3. DCMTK:读取多个图像的示例应用程序
  4. 【报错笔记】运行Maven项目时发现项目Build错误
  5. bpmn2 vue 设计器_vue项目中使用bpmn-基础篇
  6. android面试题精选
  7. Python 读入Excel表时如何判空NaN
  8. C#读取Win32标准DLL文件中的Bitmap(位图)
  9. python字典api_python接口自动化(九)--python中字典和json的区别(详解)
  10. 阶段3 2.Spring_04.Spring的常用注解_7 改变作用范围以及和生命周期相关的注解
  11. 微信HOOK之二叉树获取信息 201-12-25
  12. 几何学在计算机中应用,分形几何在计算机图形学中的应用
  13. 关于计算机听课如何做笔记,如何高效地听课记录笔记
  14. 编译原理 C-Minus 语法分析(Flex / Bison)
  15. Travel around the UK
  16. kettle多表数据迁移
  17. $(dirname $0)
  18. 电脑游戏灌输的70个山寨逻辑
  19. android Wifi自动连接
  20. 北航 计算机学院 讲师 清华大学,楚中毅 中文主页 北京航空航天大学教师个人主页系统...

热门文章

  1. CF125E MST company (凸优化+MST)
  2. 1247 排排站 USACO(查分+hash)
  3. flash FMS的一些最优参数设置
  4. IGNN图卷积超分网络:挖掘隐藏在低分辨率图像中的高清纹理
  5. 720p/30fps,谷歌人体分割模型Bodypix再次更新,针对Coral开发板优化
  6. 3行代码Python搞定图片清晰度识别,原来我们看到不一定是这样的
  7. freemarker导出word 目录_PPT转Word你还用复制粘贴?别笑掉大牙了,这几招教你快速转换...
  8. 上交大本科毕业,获ICRA最佳学生论文、机器人控制双奖项
  9. 带你自学Python系列(十三):Python函数的用法(三)
  10. 《Python编程从入门到实践》记录之函数编写指南