请参考:深入理解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());
}
}
}
执行结果:
我的名字叫猫猫 喵喵 喵喵 喵喵 喵喵 喵喵
我的名字叫狗狗 汪汪 汪汪 汪汪 汪汪 汪汪
我的名字叫牛牛 哞哞 哞哞 哞哞 哞哞 哞哞
我的名字叫羊羊 咩咩 咩咩 咩咩 咩咩 咩咩
如果您喜欢我写的博文,读后觉得收获很大,不妨小额赞助我一下,让我有动力继续写出高质量的博文,感谢您的赞赏!!!