zoukankan      html  css  js  c++  java
  • Java 多态

    多态存在的三个必要条件

    继承

    重写

    父类引用指向子类的对象

    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

    多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

    实例:

    public class Test {
        public static void main(String[] args) {
            Animal a = new Cat(); //向上转型
            a.eat(); //调用的是Cat的eat
            
            Cat c = (Cat)a; //向下转型
            c.worrk(); //调用的是Cat的work()
        }
    }
    
    class Animal{ //父类
        public void eat() {
            System.out.println("动物要吃东西~~~");
        }
    }
    
    class Dog extends Animal{ //子类
        public void eat() {
            System.out.println("狗狗要吃骨头~~~");
        }
        public void work() {
            System.out.println("狗狗要看家!!!");
        }
        
    }
    
    class Cat extends Animal{ //子类
        public void eat() {
            System.out.println("猫咪要吃小鱼~~~");
        }
        public void worrk() {
            System.out.println("猫咪要抓老鼠!!!");
        }
    }

    运行结果:

    猫咪要吃小鱼~~~
    猫咪要抓老鼠!!!

    我们主要来分析下面这一段代码:

    Animal a = new Cat(); //向上转型

    Animal 是引用类型,声明了 a 这个对象可以做哪些事,但是在对象生成的过程中,用的是 Cat 类的构造器,所以Animal相当于一个空头支票,对象 a 实际上能做的事是 Cat 决定的。此时的 a 可以调用 Cat 类或者以 Cat 类为父类的子类里面的成员变量和成员方法,而不能调用 Animal 类里面的成员变量和成员方法。

    为什么叫向上转型呢?因为 a 是属于 Cat 里面的对象,而它的引用类型是 Animal,显然,Animal是 Cat 的父类,高于 Cat,所以类型就相当于向上转型了。

    Cat c = (Cat)a; //向下转型

    这行代码中,Cat 是引用类型,创建了一个对象 c ,并且给 c 赋值为 a。因为一开始 a 是 Animal 类型的,所以要做一次强制类型转换才能和前面的 c 配得上。这就叫做向下转型。

    但是,做强制类型转化是有条件的,对象的能实际使用的哪个类型(a 实际使用的类型是Cat)不能低于将要转化的类型。

    举个例子,如下图:

    向上类型转换就向是茶杯往茶壶里倒水,即便全部倒进去也不用担心溢出。

    但是向下类型转换就有风险了,一不小心就有可能把水倒的溢出。

    多态的实现方式

    方式一:重写:

    https://www.cnblogs.com/chuijingjing/p/9461729.html

    方式二:接口

    https://www.cnblogs.com/chuijingjing/p/9472472.html

    方式三:抽象类和抽象方法

     https://www.cnblogs.com/chuijingjing/p/9476943.html

  • 相关阅读:
    读入输出优化模板
    HDU-2647 Reward(拓扑排序)
    HDU-2647 Reward(拓扑排序)
    HDU-2647 Reward(拓扑排序)
    HDU-2647 Reward(拓扑排序)
    Using KafkaBolt to write to a kafka topic
    Using KafkaBolt to write to a kafka topic
    Using KafkaBolt to write to a kafka topic
    Using KafkaBolt to write to a kafka topic
    getElementById() 获取指定ID的第一个元素
  • 原文地址:https://www.cnblogs.com/chuijingjing/p/9461787.html
Copyright © 2011-2022 走看看