多态详细讲解

【1】多态跟属性无关,多态指的是方法的多态,而不是属性的多态。
【2】案例代入:

public class Animal {//父类:动物:
    public void shout(){
        System.out.println("我是小动物,我可以叫。。。");
    }
}
public class Cat extends Animal{
    //喊叫方法:
    public void shout(){
        System.out.println("我是小猫,可以喵喵叫");
    }
    public void scratch(){
        System.out.println("我是小猫,我可以挠人");
    }
}
public class Dog extends Animal{
    //喊叫:
    public void shout(){
        System.out.println("我是小狗,我可以汪汪叫");
    }
    public void guard(){
        System.out.println("我是小狗,我可以看家护院,保护我的小主人。。。");
    }
}
public class Pig extends Animal{
    public void shout(){
        System.out.println("我是小猪,我嗯嗯嗯的叫");
    }
    public void eat(){
        System.out.println("我是小猪,我爱吃东西。。");
    }
}
public class Girl {
    //跟猫玩耍:
    /*public void play(Cat cat){
        cat.shout();
    }*/
    //跟狗玩耍:
    /*public void play(Dog dog){
        dog.shout();
    }*/
    //跟小动物玩耍:
    public void play(Animal an){
        an.shout();
    }
}
public class Test {
    //这是一个main方法,是程序的入口:
    public static void main(String[] args) {
        //具体的猫:--》猫的对象
        //Cat c = new Cat();
        //具体的小女孩:--》女孩的对象
        Girl g = new Girl();
        //小女孩跟猫玩:
        //g.play(c);
        //具体的狗---》狗的对象:
        //Dog d = new Dog();
        //小女孩跟狗玩:
        //g.play(d);
        //具体的动物:--》动物的对象:
        //Cat c = new Cat();
        //Dog d = new Dog();
        Pig p = new Pig();
        Animal an = p;
        g.play(an);
    }
}

【3】总结:
(1)先有父类,再有子类:–》继承 先有子类,再抽取父类 ----》泛化
(2)什么是多态:
多态就是多种状态:同一个行为,不同的子类表现出来不同的形态。
多态指的就是同一个方法调用,然后由于对象不同会产生不同的行为。

(3)多态的好处:
为了提高代码的扩展性,符合面向对象的设计原则:开闭原则。
开闭原则:指的就是扩展是 开放的,修改是关闭的。
注意:多态可以提高扩展性,但是扩展性没有达到最好,以后我们会学习 反射

(4)多态的要素:
一,继承: Cat extends Animal ,Pig extends Animal, Dog extends Animal
二,重写:子类对父类的方法shout()重写
三, 父类引用指向子类对象:

Pig p = new Pig();
Animal an = p;

将上面的代码合为一句话:

Animal an = new Pig();

=左侧:编译期的类型
=右侧:运行期的类型

Animal an = new Pig();
g.play(an); //
public void play(Animal an){//Animal an = an = new Pig();
        an.shout();
    }

上面的代码,也是多态的一种非常常见的应用场合:父类当方法的形参,然后传入的是具体的子类的对象,
然后调用同一个方法,根据传入的子类的不同展现出来的效果也不同,构成了多态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花伤情犹在

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

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

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

打赏作者

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

抵扣说明:

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

余额充值