• Java多态


    多态,顾名思义就是有多种形态,什么时候有多种形态呢?继承(实现)。一个子类可以在任何时候使用父类类型表示。下面看一个例子:

    一个抽象类
    public  abstract class Person {
     
        public abstract void say();
    }

    两个实现类
    public class Jerry extends Person {
        @Override
        public void say() {
            System.out.println("我是jerry");
        }
    }
    public class Tom extends Person {
    
    
        @Override
        public void say() {
            System.out.println("我是tom");
        }
    }

    如果现在需要把Jerry和Tom放进一个集合遍历操作
    public class Client4 {
        public static void main(String[] args) {
            ArrayList<Person> people = new ArrayList<>();
            people.add(new Tom());
            people.add(new Jerry());
            for (int i = 0; i < people.size(); i++) {
    //判断实例属于哪个类  instanceof 如果属于这个类或者这个类得子类的实例 就会返回true,否则返回false
                if (people.get(i) instanceof Tom) {
                    Tom tom = (Tom) people.get(i);
                    tom.say();
                } else {
                    Jerry jerry = (Jerry) people.get(i);
                    jerry.say();
                }
            }
        }
    }


    毫无疑问这是很麻烦的,取出之后还需要判断始于哪个类再执行操作。如果person的子类太多的话 判断是一件很痛苦的事,当使用多态之后上述代码可以简化为
    public class Client4 {
        public static void main(String[] args) {
            ArrayList<Person> person = new ArrayList<>();
            person.add(new Tom());
            person.add(new Jerry());
            for (int i = 0; i < person.size(); i++) {
                person.get(i).say();
            }
        }
    }

    在这里需要注意。Peoson不是一个接口。其实这个实例只是向上转型为Person类型而已,他真实的类型为Tom,他只是在需要的时候转为超类的类型存在。在任何情况下都可以把子类转换成超类类型存在。


    不和别人一样,不复制只真正理解
  • 相关阅读:
    hdu4829 带权并查集(题目不错)
    hdu4829 带权并查集(题目不错)
    洛谷 P1076 寻宝(模拟 && 剪枝)
    洛谷 P1981 表达式求值(模拟)
    洛谷 P2239 螺旋矩阵(模拟 && 数学)
    洛谷 P2118 比例简化(枚举)
    洛谷 P3956 棋盘(记忆化搜索)
    洛谷 P5018 对称二叉树(搜索)
    洛谷 P5016 龙虎斗(模拟)
    洛谷 P1563 玩具谜题(模拟)
  • 原文地址:https://www.cnblogs.com/Vinlen/p/12750771.html
Copyright © 2020-2023  润新知