黑马程序员技术交流社区
标题:
关于多态的问题
[打印本页]
作者:
hg3093483
时间:
2013-3-21 14:54
标题:
关于多态的问题
小弟看到毕老师的视频,想问一下多态的扩展性是在什么情况下能用得到呢?
作者:
郑昌奋
时间:
2013-3-21 15:02
多态有编译时多态 和运行时多态。第一个是通过方法重载实现;第二个是通过方法覆盖实现(子类覆盖父类方法)。第一种就是我们调用方法是不用区分参数类型,程序会自动执行相应方法,如: 加法运算,可以使int相加,可以是double相加,都是同一个方法名。第二种就是动态绑定,使用父类引用指向子类对象,再调用某一父类中的方法时,不同子类会表现出不同结果。 这样的作用就是扩展性极好,玩过网游的话应该知道 游戏中有不同的角色,它们都有一个父类,它们做相同动作时表现出来的效果就会不一样,比如跑,魔法师的跑跟战士的跑就不会一样,这就是俩者都覆盖了父类中的跑方法,各自有自己的现实,表现出来多态。 如果有一天你想再加个角色,只用再写一个类继承该父类,覆盖其中的跑方法就行了,其他代码不用怎么改,所以可维护性也很好。
作者:
qintoko
时间:
2013-3-21 15:12
重写父类方法后,可以实现功能极大扩展,你可以试着调试一下下面的代码
public class ExtendsTest {
public static void main(String[] args) {
Person p1 = new Chinese();
Person p2 = new Japanese();
Person p3 = new American();
Person[] plist = new Person[]{p1,p2,p3};
for(int i=0;i<3;i++){
plist[i].sayHello();
}
}
}
abstract class Person{
abstract void sayHello();
}
class Chinese extends Person{
@Override
void sayHello() {
System.out.println("Hello,I am Chinese");
}
}
class Japanese extends Person{
@Override
void sayHello() {
System.out.println("Hello,I am Japanese");
}
}
class American extends Person{
@Override
void sayHello() {
System.out.println("Hello,I am American");
}
}
复制代码
运行结果是:
Hello,I am Chinese
Hello,I am Japanese
Hello,I am American
重写父类方法后,可以实现功能极大扩展,由此可见一斑
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2