多态(Polymorphism)

【1】多态跟属性无关,多态指的是方法的多态,而不是属性的多态。

【2】案例代入:

package com.msb;
/**
 * @Auther:liu
 * @Date:-16:38:18
 * @Description:IntelliJ IDEA
 * @Version:1.0
 */
public class Animal {//父类:动物
    public void shout(){
        System.out.println("我是小动物我可以叫");
    }
}
package com.msb;

/**
 * @Auther:liu
 * @Date:-16:21:49
 * @Description:IntelliJ IDEA
 * @Version:1.0
 */
public class Cat extends Animal{
    //喊叫方法
    public void shout(){
        System.out.println("我是小猫,我可以喵喵叫。。。");
    }
    public void scratch(){
        System.out.println("我是小猫我可以挠人。。。");
    }
}
package com.msb;

/**
 * @Auther:liu
 * @Date:-16:29:27
 * @Description:IntelliJ IDEA
 * @Version:1.0
 */
public class Dog extends Animal{
    //喊叫:
    public void shout(){
        System.out.println("我是小狗,我可以汪汪叫");
    }
    public void guard(){
        System.out.println("我是小狗,我可以看家护院!");
    }
}
package com.msb;

/**
 * @Auther:liu
 * @Date:-16:23:25
 * @Description:IntelliJ IDEA
 * @Version:1.0
 */
public class Girl {
    //跟猫玩耍:
//    public void play(Cat cat){
//        cat.shout();
//    }
    //跟狗玩耍:
//    public void play(Dog dog){
//        dog.shout();
//    }
    public void play(Animal a){
        a.shout();
    }
}
package com.msb;

/**
 * @Auther:liu
 * @Date:-10:38:53
 * @Description:IntelliJ IDEA
 * @Version:1.0
 */
public class Pag extends Animal{
    public void shout(){
        System.out.println("我是小猪,嗯嗯嗯的叫");
    }
    public void eat(){
        System.out.println("我是小猪,我喜欢吃吃吃吃。。");
    }
}
package com.msb;
/**
 * @Auther:liu
 * @Date:-16:24:21
 * @Description:IntelliJ IDEA
 * @Version:1.0
 */
public class Test {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) {
        //具体的猫:猫的对象
        //Cat c=new Cat();
        //具体的小女孩:小女孩的对象
        Girl g=new Girl();
        //小女孩跟猫玩
        //g.play(c);
        //具体的够:狗的对象
        //Dog dog =new Dog();
        //g.play(dog);
        //Cat c=new Cat();
        //Dog d=new Dog();
        //Animal an=new Animal();
        //an=d;
        Pag P =new Pag();
        Animal an = P;
        g.play(an);
    }
}

【3】总结:

(1)先有--父类,再有--子类叫继承,现有--子类,再有--父类叫泛化

(2)什么是多态:

多态就是多种状态:同一个行为,不同的子类表现出来的不同的形态。

多态指的就是同一个方法调用,然后由于对象不同会产生不同的行为。

(3)多态的好处:

为了提高代码的扩展性,符合面向对象的设计原则:开闭原则。

开闭原则:指的就是扩展是开放的,修改是关闭的。

注意:多态可以提高扩展性,但是扩展性没有达到最好,以后我们会学习反射

(4)多态的三个要素:

继承:Cat extends Animal  ,pig extends Animal  ,Dog  extends Animal

重写:子类对父类的方法shout()重写

父类引用指向子类对象:

1         Pag P =new Pag();
2         Animal an = P;

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

Animal an=new Pag();

等号左侧:编译器的类型

等号右侧:运行期的类型

Animal an=new Pag();

g.play(an);

1     public void play(Animal an){//Animal an=an=new Pag(); 
2         an.shout();
3     }

上面的代码,也是多态的一种非常常见的应用的场合:父类当方法的形参,然后传入的是具体的子类的对象,

然后调用同一个方法,根据传入的子类的不同,展现出来的效果也不同,构成了多态。

posted @ 2022-09-18 11:11  爱的加勒比  阅读(179)  评论(0)    收藏  举报