小朋友学Java(10):多态

学本节之前,可以先复习 小朋友学C++(12):多态

一、定义

多态是同一个行为具有多个不同表现形式或形态的能力。

二、现实中的多态

例1:打印机

例2:按下键盘的F1键 如果当前是在Win 7的桌面,会弹出“Windows帮助和支持” 如果当前是在Word界面,会打开Word的帮助页面 如果当前是在IE浏览器窗口,会打开“Internet Explorer帮助”

三、多态的3个必要条件

联想一下花木兰替父从军的故事,多态的存在有三个前提 1 要有继承关系 2 子类要重写父类的方法 (这里父类的方法,可以是抽象方法,也可以是普通方法) 3 父类引用指向子类对象

四、程序

abstract class Animal {  
    abstract void eat();  
}  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}
public class MTest {
    public static void main(String[] args) {       
      Animal a = new Cat();      // 向上转型  
      a.eat();                   // 调用的是 Cat 的 eat
      if(a instanceof Cat) {
        Cat c = (Cat)a;         // 向下转型  
        c.work();               // 调用的是 Cat 的 work
      } else if(a instanceof Dog) {
          Dog d = (Dog)a;
          d.work();
      }
      Animal a2 = new Dog();
      a2.eat();
      if(a2 instanceof Cat) {
          Cat c = (Cat)a2;
          c.work();
      } else if(a2 instanceof Dog) {
          Dog d = (Dog)a2;
          d.work();
      }
  }  
}

运行结果:

本文分享自微信公众号 - 海天一树(gh_de7b45c40e8b)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏禁心尽力

反射+自定义注解---实现Excel数据列属性和JavaBean属性的自动映射

简单粗暴,直奔主题。 需求:通过自定义注解和反射技术,将Excel文件中的数据自动映射到pojo类中,最终返回一个List<pojo>集合?   今天我只是通...

54290
来自专栏个人分享

Hive metastore源码阅读(二)

  最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展。比如:在create_tabl...

25930
来自专栏MelonTeam专栏

基于Java反射实现Android的ORM框架1. 框架设计2. 内部实现的几个重要实现规则3. 代码实现

导语: Java反射机制是一个很好用的东西。反射机制可以帮我们做那些重复的有规则的事情,所以现在很多的自动生成代码的软件就是运用反射机制来完成的。这里重复造个...

19960
来自专栏Java成神之路

HQL语句大全

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它...

24150
来自专栏机器学习与自然语言处理

06-图1 列出连通集

题目来源:http://pta.patest.cn/pta/test/18/exam/4/question/624 给定一个有N个顶点和E条边的无向图,请用DF...

23090
来自专栏风口上的猪的文章

.NET面试题系列[13] - LINQ to Object

"C# 3.0所有特性的提出都是更好地为LINQ服务的" - Learning Hard

13720
来自专栏Java与Android技术栈

RxJava 之 ParallelFlowable

RxJava 2.0.5 版本新增了 ParallelFlowable API,它允许并行地执行一些运算符,譬如map、filter、concatMap、fla...

16720
来自专栏恰童鞋骚年

剑指Offer面试题:27.最小的k个数

  这道题是典型的TopK问题,其最简单的思路莫过于把输入的n个整数排序,排序之后位于最前面的k个数就是最小的k个数。这种思路的时间复杂度是O(nlogn),但...

17620
来自专栏mwangblog

python类(二)

16120
来自专栏云时之间

数据结构(三):栈与队列

3.1❶若按教科书3.1.1节中图3.1(b)所示铁道进行车厢调度(注意:两侧铁道均为单向行驶道),则请回答: ? (1) 如果进站的车厢序列为123,则可能...

40970

扫码关注云+社区

领取腾讯云代金券