10 使用多态的好处

首先,幻想一下你一个有女朋友。你女朋友想看鹦鹉跑。
然后你就给她造了个鹦鹉出来,让它会跑。鹦鹉声音还好听,所以给了它haoting属性。

public class Yinwu extends Bird{
    private String haoting;
    public void run(){
        System.out.println("Yinwu run");
    }
}

之后笑嘻嘻的给她看

public class nvpengyou {
    public void look(Dujuan dujuan){
    
    }
}

·····
看了一段时间之后,你女朋友腻了,想看杜鹃跑。
然后你又给她造了个杜鹃出来,让她会跑。杜鹃还会跳舞,所以你给了它tiaowu属性。

public class Dujuan extends Bird{
    private String tiaowu;
    public void run(){
        System.out.println("Dujuan run");
    }
}

look()方法的参数改为Yinwu

public class nvpengyou {
    public void look(Yinwu yinwu){

    }
}

或者重载look方法

public class nvpengyou {
    public void look(Dujuan dujuan){

    }
    public void look(Yinwu yinwu){

    }
}

又笑嘻嘻的让她看

又过了一段时间之后,你女朋友又看腻了,她又想看其他的鸟了…
然后你说:还有完没完了,骂骂咧咧的又去改代码了。。

如果你的女朋友又腻了呢?你还得去新建一个类,然后改look()方法的参数或则再重载一个’look’吗?

深爱女朋友的你就寻思找一种简便一点的方法…

所以…

你先建了一个Bird类(父类)。因为它们都会跑。

public class Bird {
    public void run(){
        System.out.println("Bird run");
    }
}

然后造了Dujuan和鹦鹉

public class Dujuan extends Bird{
    private String haokan;
    public void run(){
        System.out.println("Dujuan run");
    }
}
public class Yinwu extends Bird{
    private String haoting;
    public void run(){
        System.out.println("Yinwu run");
    }
}

女朋友想看杜鹃

public class nvpengyou {
    public void look(Bird bird){
        bird = new Dujuan();
        Dujuan dujuan = (Dujuan) bird;//还想有它跳舞属性
        dujuan.tiaowu;
    }
}

女朋友想看鹦鹉

public class nvpengyou {
    public void look(Bird bird){
        bird = new Yinwu();
        Yinwu yinwu = (Yinwu) bird;//还想有它的好听属性
        yinwu.haoting  
    }
}

女朋友还想看…

现在理解多态的好处了吧,从此跟女朋友过上了性福生活!

注意:
我们不用纠结为什么Java可以采用向下造型(父类向下造型为子类,然后得到子类对象,从而获取子类的属性)

Yinwu yinwu = (Yinwu) bird

因为这本身就是Java语法规定的。既然是规定,你管它干嘛?

或则

向上造型

Yinwu yinwu = new Yinwu();
Bird bird = (Bird)yinwu; 

(你管它干嘛?,用就得了呗)

发布了88 篇原创文章 · 获赞 3 · 访问量 4205

猜你喜欢

转载自blog.csdn.net/weixin_43691098/article/details/104021152