zoukankan      html  css  js  c++  java
  • java 多态 总结

    1.前言

    引用教科书解释:

    多态是同一个行为具有多个不同表现形式或形态的能力。
    多态就是同一个接口,使用不同的实例而执行不同操作。

    通俗来说:

    总结:多态的抽象类与接口有点相似;
    
    父类不需要具体实现方法,仅需要定义即可,需要在单独的类继承后成为子类,在子类实现具体方法,
    调用父类方法可直接执行子类的重写方法,
    可被多个不同的类继承,
    子类可直接赋值给父类,但是父类需要强转子类 ,如果一个父类下面有多个子类,那么 父类强转子类之前需要确认此刻
    父类是由哪个系类赋值的后才可以转到对应的子类,否则会报错。 可见父类可拥有多种状态,因此,这就称为多态。

    2.操作

    (1)目录结构

     (2)配置一个抽象父类

    package com.example.javabaisc.myAbstract;
    
    abstract class Food {
        abstract void food();
    }
    View Code

    (3)配置两个子类

    package com.example.javabaisc.myAbstract;
    
    public class Apple extends Food {
        //重新父类
        @Override
        void food() {
            System.out.println("苹果");
        }
    
        void color(){
            System.out.println("red");
        }
    }
    Apple
    package com.example.javabaisc.myAbstract;
    
    public class Banana extends Food{
        //重写父类
        @Override
        void food() {
            System.out.println("香蕉");
        }
        void color(){
            System.out.println("yellow");
        }
    }
    Banana

    (4)测试类

    package com.example.javabaisc.myAbstract;
    
    import org.junit.jupiter.api.Test;
    
    public class AbstractTest {
    
        @Test
        public void t(){
            // 子类向父类转型
            Food food = new Apple();
            food.food();
            //父类向子类转型
            Apple apple = (Apple)food;
            apple.color();
            System.out.println("//==================================");
            // 子类向父类转型后作为参数输入
            this.eat(new Apple());
            this.eat(new Banana());
    
        }
    
        private void eat(Food food){
            //执行父类的方法,然后执行子类的重写方法
            food.food();
            //因为有一个父类被两个不同的子类继承,因此需要判断此时父类是与哪个一类为同一类的,然后才能强制转成子类,成为子类才可以调用子类方法
            if (food instanceof Apple){
                Apple apple = (Apple)food;
                apple.color();
            }else if(food instanceof Banana){
                Banana banana = (Banana)food;
                banana.color();
            }
        }
    
    }
    test

    3.测试

  • 相关阅读:
    实现报表数据外置计算
    实现报表数据的可控缓存
    实现报表数据分库存储
    实现报表数据预先计算
    实现报表与算法的统一管理
    如何实现报表直接打印需求
    交叉填报表的制作
    格间计算性能提升方案
    填报脚本之轻松搞定复杂表的数据入库
    treeview_dropdown_control
  • 原文地址:https://www.cnblogs.com/c2g5201314/p/13097216.html
Copyright © 2011-2022 走看看