欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多态,动态绑定

程序员文章站 2022-07-12 14:59:43
...
调用方法时,只要方法重写了,实际当中调哪个,要看实际中new哪个对象。

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

多态的存在必要条件: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方法。
  • 多态,动态绑定
            
    
    博客分类: 马士兵 多态动态绑定面向对象的核心 
  • 大小: 59.5 KB