多态,动态绑定

调用方法时,只要方法重写了,实际当中调哪个,要看实际中new哪个对象。

[color=red]好处:可扩展性达到最好。[/color]当增加东西时,不需要改原来的结构,直接加上就可以了。

[color=red]多态的存在必要条件:1:要有继承,2:要有重写,3:父类引用指向子类对象。[/color]

package test;

class Animal{
private String name;
Animal(String name){this.name = name;}
public void enjoy(){
System.out.println("叫声");
}
}

class Cat extends Animal{
private String eyesColor; //自己的成员变量
Cat (String n,String c){super(n);eyesColor = c;}//构造方法
public void enjoy(){
//与父类不同,有自己独特方法,所以需要重写enjoy方法
System.out.println("猫叫声");
}
}

class Dog extends Animal{
private String furColor;
Dog (String n,String c){super(n);furColor = c;}
public void enjoy(){
System.out.println("狗叫声");
}
}

class Lady{
private String name;
//定义Animal类型,可以给程序带来最大的灵活性,(定义成父类的引用)
private Animal pet;
Lady(String name,Animal pet){//构造方法
this.name = name;
this.pet = pet;
}
public void myPetEnjoy(){
pet.enjoy();
}
}

public class Test {
public static void main(String args[]){
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
Lady l1 = new Lady("l1",c);
Lady l2 = new Lady("l2",d);
l1.myPetEnjoy();
l2.myPetEnjoy();
}
}


[img]http://dl2.iteye.com/upload/attachment/0116/1286/3df5b098-feb9-39f1-9c16-23e93a0d5f95.jpg[/img]

[size=small]输出结果:
猫叫声
狗叫声[/size]
[color=red]Why?[/color]
动态绑定是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法“

上面例子中,根据Lady对象的成员变量pet所引用的不同的实际类型而调用相应的enjoy方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值