【Java基础】多态的概述、成员访问特点、好处弊端及多态的转型

目录

一、多态的概述

二、多态中的成员访问特点

三、多态的好处和弊端

四、多态的转型

五、多态的案例


一、多态的概述

什么是多态:

同一个对象,在不同时刻表现出来的不同形态

多态的前提:

要有继承或实现关系

要有方法的重写

要有父类引用指向子类对象

二、多态中的成员访问特点

成员访问特点:

成员变量

        编译看父类,运行看父类

成员方法

        编译看父类,运行看子类

代码演示:

动物类

public class Animal { 
    public int age = 40; 

        public void eat() { 
            System.out.println("动物吃东西"); 
    } 
}

猪类

public class Cat extends Animal { 
    public int age = 20; 
    public int weight = 10; 

    @Override 
    public void eat() { 
        System.out.println("猫吃鱼"); 
    }

    public void playGame() { 
        System.out.println("猫捉迷藏"); 
    } 
}

测试类

public class AnimalDemo { 
    public static void main(String[] args) { 
        //有父类引用指向子类对象 
        Animal a = new Cat(); 

        System.out.println(a.age); 
        // System.out.println(a.weight); 

        a.eat(); 
        // a.playGame(); 
    } 
}

三、多态的好处和弊端

好处:

提高程序的扩展性,定义方法时候,使用父类型作为参数,在使用的时候,使用具体的子类型参与操作

弊端:

不能使用子类的特有成员

四、多态的转型

向上转型:

父类引用指向子类对象就是向上转型

向下转型:

格式:子类型 对象名 = (子类型) 父类引用;

代码演示:

动物类

public class Animal { 
    public void eat() { 
        System.out.println("动物吃东西"); 
    } 
}

猫类

public class Cat extends Animal {
    @Override 
    public void eat() { 
        System.out.println("猫吃鱼"); 
    }

    public void playGame() { 
        System.out.println("猫捉迷藏"); 
    } 
}

测试类:

public class AnimalDemo { 
    public static void main(String[] args) { 
        //多态 
        //向上转型 
        Animal a = new Cat(); 
        a.eat(); 
        // a.playGame(); 

        //向下转型 
        Cat c = (Cat)a; 
        c.eat(); 
        c.playGame(); 
    } 
}

五、多态的案例

需求:请采用多态的思维实现猫和狗的案例,并在测试类中进行测试

代码实现:

动物类

public class Animal { 
    private String name; 
    private int age; 

    public Animal() { 
    }

    public Animal(String name, int age) { 
        this.name = name; 
        this.age = age; 
    }

    public String getName() { 
        return name; 
    }

    public void setName(String name) { 
        this.name = name; 
    }

    public int getAge() { 
        return age; 
    }

    public void setAge(int age) { 
        this.age = age; 
    }

    public void eat() { 
        System.out.println("动物吃东西"); 
    } 
}

猪类

public class Cat extends Animal { 

    public Cat() { 
    }

    public Cat(String name, int age) { 
        super(name, age); 
    }

    @Override 
    public void eat() { 
        System.out.println("猫吃鱼"); 
    } 
}

狗类

public class Dog extends Animal { 

    public Dog() { 
    }

    public Dog(String name, int age) { 
        super(name, age); 
    }

    @Override 
    public void eat() { 
        System.out.println("狗吃骨头"); 
    } 
}

测试类

public class AnimalDemo { 
    public static void main(String[] args) { 
        //创建猫类对象进行测试 
        Animal a = new Cat(); 
        a.setName("加菲"); 
        a.setAge(5); 
        System.out.println(a.getName() + "," + a.getAge()); 
        a.eat(); 

        a = new Cat("加菲", 5); 
        System.out.println(a.getName() + "," + a.getAge()); 
        a.eat(); 
    } 
}

 

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏志121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值