多态
来源:互联网 发布:linux查看log日志命令 编辑:程序博客网 时间:2024/06/11 13:51
请参考:深入理解Java的接口和抽象类
http://blog.csdn.net/silentwolfyh/article/details/52884434
多态概念
1) 多态是同一个行为具有多个不同表现形式或形态的能力。
2) 多态性是对象多种表现形式的体现。
3) 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:
多态的优点
1) 消除类型之间的耦合关系
2)可替换性
3)可扩充性
4)接口性
5)灵活性
6) 简化性
多态存在的三个必要条件
1)继承
2)重写
3)父类引用指向子类对象,eg:
代码如下:
package com.yuhui.a10;abstract class Animal { protected String name = ""; protected int shoutNum = 5; public String Shout(){ StringBuffer result = new StringBuffer(); for(int i= 0 ;i <shoutNum;i++ ){ result.append(getShoutSound()); } return "我的名字叫"+name +" "+ result; } abstract String getShoutSound();}
package com.yuhui.a10;class Cat extends Animal{ public Cat() {} public Cat(String name) {super.name = name;} protected String getShoutSound() { return " 喵喵 "; }}
package com.yuhui.a10;public class Dog extends Animal{ Dog() {} Dog(String name) {super.name = name;} protected String getShoutSound() { return " 汪汪 "; }}
package com.yuhui.a10;class Sheep extends Animal{ public Sheep() {} public Sheep(String name) {super.name = name;} protected String getShoutSound() { return " 咩咩 "; }}
package com.yuhui.a10;class Cattle extends Animal{ public Cattle() {} public Cattle(String name) {super.name = name;} protected String getShoutSound() { return " 哞哞 "; }}
package com.yuhui.a10;public class Animals { public static void main(String[] args) { Animal[] an = new Animal[4]; an[0] = new Cat("猫猫"); an[1] = new Dog("狗狗"); an[2] = new Cattle("牛牛"); an[3] = new Sheep("羊羊"); //调用抽象类中的方法 for(Animal a : an){ System.out.println(a.Shout()); } }}
执行结果:
我的名字叫猫猫 喵喵 喵喵 喵喵 喵喵 喵喵
我的名字叫狗狗 汪汪 汪汪 汪汪 汪汪 汪汪
我的名字叫牛牛 哞哞 哞哞 哞哞 哞哞 哞哞
我的名字叫羊羊 咩咩 咩咩 咩咩 咩咩 咩咩
0 0