一、基础概念

  多态

    重点是对象的多态性。某一事物的多种体现形态。

  多态的作用:

    1.提高了代码的扩展性,后期出现的功能,可以被之前的程序所执行。

    2.不能使用子类特有的功能。只能使用覆盖父类的功能。

  多态的前提:

    1.必须要有继承关系或者实现关系。

    2.通常对方法进行重写、覆盖。

    3.父类或者接口要引用指向子类对象。

  多态向上转型:

    1.提高程序的扩展性,隐藏了具体子类型

    2.只能使用父类中的功能,不能使用子类特有的功能。功能被限定了。

  多态向下转型:

    1.可以使用子类型的特有功能。

    2.必须面对具体的子类型。

    3.为了避免运行时出现ClassCastException 问题,需要用关键字instanceof来进行判断。

  注意:

    多态至始至终都是子类对象在做着类型的变化。

二、代码实例

  1 //父类Animal
  2 abstract class Animal
  3 {
  4     abstract void eat();
  5     abstract void sleep();
  6 }
  7
  8 //Dog类继承Animal类
  9 class Dog extends Animal
 10 {
 11     /**
 12     将Animal类中的方法重写
 13     */
 14     void eat()
 15     {
 16         System.out.println("dog eat 吃骨头");
 17     }
 18     void sleep()
 19     {
 20         System.out.println("dog sleep .....");
 21     }
 22
 23     /**
 24     自己特有的方法
 25     */
 26     void say()
 27     {
 28         System.out.println("dog say .....");
 29     }
 30 }
 31
 32 //Cat类继承Animal类
 33 class Cat extends Animal
 34 {
 35     /**
 36     将Animal类中的方法重写
 37     */
 38     void eat()
 39     {
 40         System.out.println("Cat eat 吃鱼");
 41     }
 42     void sleep()
 43     {
 44         System.out.println("Cat sleep .....");
 45     }
 46 }
 47
 48 class DuoTaiDemo
 49 {
 50     //封装Dog类的方法
 51     public static void method(Dog d)
 52     {
 53         d.eat();
 54         d.sleep();
 55         d.say();
 56     }
 57
 58     //封装Cat类的方法
 59     public static void method(Cat c)
 60     {
 61         c.eat();
 62         c.sleep();
 63     }
 64
 65     //封装父类Animal的方法
 66     public static void method(Animal s)
 67     {
 68         s.eat();
 69         s.sleep();
 70     }
 71
 72     public static void main(String[] args)
 73     {
 74         Dog d1 = new Dog();
 75         method(d1);
 76
 77         Cat c = new Cat();
 78         method(c);
 79
 80         Animal s = new Dog(); //多态性,向上转型,将Dog提升为Animal。
 81         method(s); //只能使用覆盖了父类Animal的eat方法和sleep方法。不能使用Dog类中自己的say方法。
 82
 83         Animal a = new Cat(); //多态性,向上转型。
 84         method(a);
 85
 86         /**
 87         向下转型,为了避免运行时出现ClassCastException 问题,
 88         需要用关键字instanceof来进行判断。
 89         */
 90         if( !(s instanceof Dog))
 91         {
 92             System.out.println("类型不匹配");
 93             return ;
 94         }
 95             Dog d2 = (Dog)s;  //多态性,向下转型。
 96             d2.eat();
 97             d2.sleep();
 98             d2.say();
 99     }
100 }

三、运行代码

  

转载于:https://www.cnblogs.com/zhuxr/p/8943897.html

Java面向对象之多态(向上、向下转型) 入门实例相关推荐

  1. Java阻断继承和向上向下转型

    1.阻断继承 从Java15开始,允许使用sealed修饰符,并通过permits明确写出能够从该class继承的子类名称.这种sealed类主要用于一些框架,防止继承被滥用.sealed类在Java ...

  2. 【java基础18:方法覆盖与多态】什么时候使用方法覆盖 toString方法的覆盖 多态的基础语法与作用 向上/向下转型

    目录 方法覆盖Override 多态 方法覆盖Override 方法覆盖初体验,什么样的程序要方法覆盖 /*当前程序存在的问题(设计上的问题)??鸟儿在执行move()方法的时候,最好输出的结果是:& ...

  3. Java面向对象:多态——基于继承的向上转型、方法重写、动态绑定

    Java面向对象:多态 1.多态的概念 2.向上转型和向下转型 (1)向上转型 (2)向下转型 3.方法重写 4.动态绑定与静态绑定 5.多态的优缺点 ======================== ...

  4. 12 Java面向对象之多态

    JavaSE 基础之十二 12 Java面向对象之多态 ① 多态的概念及分类 多态的概念:对象的多种表现形式和能力 多态的分类 1. 静态多态:在编译期间,程序就能决定调用哪个方法.方法的重载就表现出 ...

  5. Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型...

    任何类都是object类的子类 用object对象接收数组 object类的向上向下转型 转载于:https://www.cnblogs.com/qingyundian/p/7744351.html

  6. Java 面向对象:多态的理解

    Java 面向对象:多态的理解 一.多态的定义 一个对象的实际类型是确定的,但可以指向引用对象的类型可以有很多(父类,有关系的类) 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父 ...

  7. Java面向对象之多态(来源于身边的案例)

    2019年1月3日 星期四 Java面向对象之多态(来源于身边的案例) 1. 为什么要用多态? 1.1 多态是面向对象的三大特性之一 1.2 多态是基于接口设计的模型 1.3 多态具有横向扩展特性 1 ...

  8. Java多态与向上向下转型

    多态的必要三要素 1.继承 2.方法重写 3.向上转型 多态的作用 1.增加代码的复用性 2.便于代码的管理与维护 案例引入 代码: //测试类 public class Test {public s ...

  9. java 面向对象的多态性——向上转型与向下转型

    目录 类定义了之后需要被调用定义对象才能执行. 在前几篇中讨论了抽象类和接口,其中抽象方法是对这样的动作的抽象描述:动作名称相同,但不同类别具体执行动作的内容不同. 如:人类有"工作&quo ...

  10. 面向对象3(final、static、instanceof、向上/向下转型、初始化次序)

    1. final 对于基本类型,final 使数值不变: 对于引用类型,final 使引用不变,也就不能引用其它对象,但是被引用的对象本身是可以修改的. 可用来修饰类.类的成员.局部变量: final ...

最新文章

  1. web前端零基础入门学习!前端真不难!
  2. windows API函数copyfile
  3. 第十天-linux命令及基础手把手实战
  4. matlab eval函数_matlab自动给变量命名
  5. java ee 7 新_Java EE 7:新功能???
  6. 微型计算机方面的论文,微型计算机论文.doc
  7. 证券投资深度学习_安信证券:“深度学习”开启新一轮计算模式变革
  8. 计算机管理 没有适当的权限,提示没有合适的权限访问怎么办
  9. 黑客攻防技术宝典web实战篇:利用信息泄露习题
  10. Python垃圾回收机制 总结
  11. CentOS安装并设置MariaDB
  12. 软件nginx 0.8.16
  13. 对抗生成网络GAN系列——CycleGAN简介及图片春冬变换案例
  14. 微众银行风险模型笔试前做的准备(公司介绍+欺诈与反欺诈+sql+机器学习)
  15. 数据安全管理条例明确个人信息保护 360呼吁隐私保护重在企业
  16. 网络打印机无法接收打印命令
  17. MySQL 从 8.0.31 开始从原来的 mysql:mysql-connector-java 改为 com.mysql:mysql-connector-j
  18. 游戏服务器内三类线程池的划分与使用
  19. Html设置文本换行与不按行操作
  20. openlayers2.13 地图绘点[点可以拖动,并且实时更新后台数据],测距同时更新数据到数据库

热门文章

  1. 重建二叉树(C++)
  2. 网络核心之数据交换-电路交换
  3. 游戏开发之C++类和对象相关概念实例(C++)
  4. webpack多环境(dev stg prd qa)打包问题
  5. centos6.5 安装svn可视化管理工具 if.svnadmin
  6. 学习 (2012.01)
  7. Miniflter中 NPInstanceSetup调查
  8. 如果这样 你跟小三走吧
  9. 关于EPOLL的ET和LT模式的深入理解
  10. python统计图的三层结构设计代码_【Python数据可视化】用Matplotlib绘制常见统计图,中文显示字体任意设置...