代码: Father f = new Child(); //假设父类是球,子类是篮球,父类有playBall方法,子类进行重写
1、在内存中(stack区)创建一个Father的引用f,在heap中new出一个Child类型的对象,并且f指向new出来的对象。
2、此时对于父类引用f来说,他只知道自己指向的是一个球,并不管这个球是篮球或者足球,所以f只能访问球的相关属性和方法,而不能访问篮球(child)的方法。
3、但是当你调用f.playBall()方法时,真正执行的他指向的对象的playBall方法(即时父类并不知道子类的playBall方法);假设给你一个球(实际上是个篮球),让你执行打球的方法,你肯定是用打篮球的方法来打球。
这样就可以用来理解多态的概念了(假设现在给你一个足球,你就会用踢足球的方法来打球)。
动态绑定、 多态 、迟绑定(相同的概念):在运行期间判断所引用对象的实际类型,根据其实际类型调用其相应的方法。
1、在内存中(stack区)创建一个Father的引用f,在heap中new出一个Child类型的对象,并且f指向new出来的对象。
2、此时对于父类引用f来说,他只知道自己指向的是一个球,并不管这个球是篮球或者足球,所以f只能访问球的相关属性和方法,而不能访问篮球(child)的方法。
3、但是当你调用f.playBall()方法时,真正执行的他指向的对象的playBall方法(即时父类并不知道子类的playBall方法);假设给你一个球(实际上是个篮球),让你执行打球的方法,你肯定是用打篮球的方法来打球。
这样就可以用来理解多态的概念了(假设现在给你一个足球,你就会用踢足球的方法来打球)。
动态绑定、 多态 、迟绑定(相同的概念):在运行期间判断所引用对象的实际类型,根据其实际类型调用其相应的方法。