• Java基础之多态(最简单最详细)


    多态的概念

    多态是同一个行为具有多种不同的表现形式

    多态的前提

    有继承/实现关系

    方法重写

    父类引用指向子类对象。(或者接口指向实现类对象)

    多态的作用

    增加通用性,可以将一个变量使其可以接收多种类型的变量。

    多态的访问特点

    方法调用

    编译看左边(父类),运行看右边(子类)

    编译看左边(能调用什么方法,要看父类,父类没有的方法无法调用),运行看右边(具体的运行效果参照子类)

    变量调用

    编译看左边(父类),运行也看左边(子类)

    (变量没有多态性

    多态的应用

    把方法的参数设计为父类,调用时可以接收任意子类,提高代码的扩展性和灵活性

    //Animals
    public class Animals {
        public void eat(){
            System.out.println("动物吃饭");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //Cat
    public class Cat extends Animals{
        @Override
        public void eat() {
            System.out.println("猫吃耗子");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    //Dog
    public class Dog extends Animals {
        @Override
        public void eat() {
            System.out.println("狗吃骨头");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    //测试类
    public class Person {
        public static void main(String[] args) {
            feed(new Cat());
            System.out.println("---------");
            feed(new Dog());
        }
    
    /*方法的参数如果定义成Cat或Dog,那就只能传入一种
    如果想再传入另一种只能进行方法重载
    在这里将参数定义为父类Animals,运用了多态,可以传入多种类型
    */
        public static void feed(Animals a) {
            System.out.println("开始");
            a.eat();
            System.out.println("结束");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    多态的类型转换

    方法调用:编译看左边,运行看右边

    缺点:多态下无法使用子类特有的方法

    解决方法:类型转换

    在强转时,如果实际类型不匹配,就会造成转换异常

    对象名 Instanceof 类名 :对象是否属于类,属于返回true,否则返回false

    给Cat和Dog加上特有的方法

    //Animals
    public class Animals {
        public void eat(){
            System.out.println("动物吃饭");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    //Cat
    public class Cat extends Animals{
        @Override
        public void eat() {
            System.out.println("猫吃耗子");
        }
    
    	//特有方法
        public void games(){
            System.out.println("猫玩毛球");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    //Dog
    public class Dog extends Animals {
        @Override
        public void eat() {
            System.out.println("狗吃骨头");
        }
        
    	//特有方法
        public void games(){
            System.out.println("狗玩飞盘");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    public class Person {
        public static void main(String[] args) {
            feed(new Cat());
            System.out.println("---------");
            feed(new Dog());
            System.out.println("--------");
    
    		//调用特殊方法
            skill(new Dog());
            skill(new Cat());
        }
    
        public static void feed(Animals a) {
            System.out.println("开始");
            a.eat();
            System.out.println("结束");
        }
    
        public static void skill(Animals a){
            if(a instanceof Cat){
                //并没有产生新的对象,而只是进行了类型转换
                Cat cat = (Cat) a;
                cat.games();
            }else if(a instanceof Dog){
                Dog dog = (Dog)a;
                dog.games();
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    最后

    如果你对本文有疑问,你可以在文章下方对我留言,敬请指正,对于每个留言我都会认真查看。

  • 相关阅读:
    Flink概念及应用场景
    Vue 获取/设置指定组件高度
    Centos根目录空间占满的解决思路
    [python] 基于Dataset库操作数据库
    基于HTML制作的闲置交易网站设计
    无参数构造器
    PM2管理器无法使用解决方法
    java毕业设计网上课程资源管理系统源码+lw文档+mybatis+系统+mysql数据库+调试
    9张图深入剖析ConcurrentHashMap
    【图像去噪】【TGV 正则器的快速计算方法】通过FFT的总(广义)变化进行图像去噪(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/weixin_47543906/article/details/127645282