java基础难理解01-多态
目录
一些概念
1.向上转型
对象即可以作为自己本身的类型使用,也可以作为它的基类类型使用,把这种对于某个对象的引用
视为对其基类型的引用称为向上转型。
2.方法调用绑定
1.将一个方法调用同一个方法主体关联起来被称作绑定。
2.若在程序执行前进行绑定(由编译器和连接程序实现),叫做前期绑定。
3.在运行时根据对象的类型进行绑定,叫做后期绑定,也叫动态绑定或运行时绑定。如果一种语言想实现后期
绑定,就必须具有某种机制,以便在运行时能判断对象的类型,从而调用恰当的方法。也就是说,编译器一
直不知道对象的类型,但是方法调用机制能找到正确的方法体,并加以调用。不同的语言,不管怎样都必须
在对象中安置某种“类型信息”。
4.java中除了static方法和final方法之外,其它所有方法都是后期绑定。
5.也就是说java中所有方法都是通过动态绑定实现多态。
多态
1.举例
例如:
Shape s = new Circle(); //Shape是Circle的父类
这里,创建了一个Circle对象,并把得到的引用立即赋值给Shape,通过继承,Circle就是一种Shape。
因此,编译器不会报错(向上转型)。
你可能再次认为调用的是Shape的draw(),因为这毕竟是一个Shape引用,那么编译器是怎么知道去做其他的事情呢?
由于后期绑定(多态),还是能够正确调用Circle.draw()方法。
2.注意事项
1.静态方法,不具有多态性。
2.直接访问某个域(例如:直接访问属性为public类成员),这个访问将在编译期进行
解析,不具有多态性。
3.private方法被自动认为是final方法,不支持多态。
3.总结
多态:
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。