码迷,mamicode.com
首页 > 编程语言 > 详细

hinking in JAVA笔记——第8章 多态

时间:2015-05-18 22:27:06      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

多态分离做什么和怎么做。又成为动态绑定,后期绑定或运行时绑定。

8.1再论向上转型

对象可以当做它的父类型来使用,称为向上转型。

一个方法接受父类为参数,所有的子类都能调用这个方法,编译器在编译时间不确定执行哪个方法,在运行时间根据相应的子类是否重写了方法决定调用哪个方法,这样做大大减少了编程。

8.2转机?

8.2.1方法调用绑定

将方法调用和方法主体关联起来被称作绑定。

后期绑定:在运行时根据对象的类型进行绑定

编译器不知道对象的类型(因为编译器只知道这是个父类,不知道是哪个子类传入的)

Java中除了static方法和final方法外都是后期绑定。

8.2.2产生正确的行为

编译器只知道对象是一种父类,只有到运行时间才知道对象具体是什么类,并执行正确的行为。

8.2.3  可扩展性

操作基类的方法不用经过任何修改!

Parent s=new Son();

发生了什么:new一个子类,为子类申请空间,但向上转型后子类增加的部分就不可见了(仍然存在!),调用方法也优先考虑子类覆盖的方法!

8.2.4 缺陷:“覆盖”私有方法

覆盖private方法不会报错,但语义不是覆盖,而是新方法,向上转型后就不可见了,达不到多态的效果。

因此,要避免“覆盖”private方法,应该起一个不同的名字!

8.2.5 缺陷:域与静态方法

域(成员变量)是在编译时间绑定的,是不会覆盖的。

如果子类和父类域名相同,则各自有各自的空间,向上转型后子类的域就不可见了(除非调用子类覆盖的方法)

实践中应该避免这种情况,首选尽量将所有的域定义为private,其次不要为子类加一个同名的域!

静态方法也不具有多态性。

hinking in JAVA笔记——第8章 多态

标签:

原文地址:http://www.cnblogs.com/cjrzh/p/4512974.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!