• 韩顺平-多态


    📝先理解几点要点:

    1.一个对象的编译类型和运行类型可以不一致
    2.编译类型在定义对象时,就确定了,不能改变
    3.运行类型时可以变化的
    4编译类型看定义时 = 号的左边,运行类型看 = 号的右边
    如下所示:

    Animals animals=new Dog();

    animals编译类型是Animals,运行类型是animals

    📒多态的细节讨论-多态的向上转型

    多态的前提:两个对象(类)存在继承关系

    (1)本质:父类的引用指向子类的对象
    (2)语法:父类类型 引用名 = new 子类类型();
    (3)特点:编译类型看左边,运行类型看右边;
    可以调用父类中所有成员(对象,方法…)(需要遵守访问权限)
    不能调用子类中特有的成员
    最终运行效果看子类的具体体现

    🎯父类

    package Poly_.detail;
    
    public class PolyDetail {
        public static void main(String[] args) {
            //向上转型
            Animal animal=new Cat();
            System.out.println("ok~~");
            //因为在编译阶段,即调用哪些成员,是由编译类型决定的
            //animals.catchMouse()错误
            //最终运行效果看子类的具体实现,即调用方法时,按照从子类开始查找方法
            //然后调用,规则同前面讲的方法调用一致
          animal.eat();
          animal.run();
          animal.show();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    🎯Animals类

    package Poly_.detail;
    
    public class Animal {
        String name="动物";
        int age=10;
        public void sleep(){
            System.out.println("睡");
        }
        public void run(){
            System.out.println("跑");
        }
        public void eat(){
            System.out.println("吃");
        }
        public void show(){
            System.out.println("hello ,你好");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    🎯Cat类

    package Poly_.detail;
    import Super.A;
    public class Cat extends Animal {
        public void eat(){
            System.out.println("猫吃鱼");
        }
        public void catMouse(){
            System.out.println("猫抓老鼠+");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    📒多态的细节讨论-多态的向下转型

    (1)语法 :子类类型 引用名 = (子类类型) 父类引用
    (2) 只能强转父类的引用,不能强转父类的对象
    (3)要求父类的引用必须指向当前目标类型的对象
    (4)当向下转型后,可以调用子类类型中所有成员

    在这里插入图片描述

    
          //多态的向下转型
            //语法:子类类型 引用名=(子类类型) 父类引用;
            //cat的编译类型Cat,运行类型是Cat
            Cat cat=(Cat) animal;
            cat.catMouse();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

  • 相关阅读:
    x.509
    echarts自定义点击事件
    java面试清单和书籍推荐 五颗星五颗星
    java毕业生设计中小学图书馆管理计算机源码+系统+mysql+调试部署+lw
    C语言-求一个整数储存在内存中的二进制中1的个数
    C++ iostream、ostream、istream等标准库都是什么?看完这篇就知道了
    数学建模学习(73):用Python敏感性分析,如此轻松简单
    为什么要使用BGP?
    树莓派4b装系统到运行 Blazor Linux 本地程序全记录
    tensorflow切片
  • 原文地址:https://blog.csdn.net/yangqiqi1997/article/details/126197736