多态(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 @   爱的加勒比  阅读(175)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示