多态,动态绑定
程序员文章站
2022-07-12 14:59:43
...
调用方法时,只要方法重写了,实际当中调哪个,要看实际中new哪个对象。
好处:可扩展性达到最好。当增加东西时,不需要改原来的结构,直接加上就可以了。
多态的存在必要条件:1:要有继承,2:要有重写,3:父类引用指向子类对象。
输出结果:
猫叫声
狗叫声
Why?
动态绑定是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法“
上面例子中,根据Lady对象的成员变量pet所引用的不同的实际类型而调用相应的enjoy方法。
好处:可扩展性达到最好。当增加东西时,不需要改原来的结构,直接加上就可以了。
多态的存在必要条件:1:要有继承,2:要有重写,3:父类引用指向子类对象。
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(); } }
输出结果:
猫叫声
狗叫声
Why?
动态绑定是指“在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法“
上面例子中,根据Lady对象的成员变量pet所引用的不同的实际类型而调用相应的enjoy方法。
上一篇: 面向对象中的多态