Think in java学习笔记-第7章 Polymorphism

多态性

面向对象的程序设计语言的第三种最基本的特征-多态性。

抽象:创建出新的数据类型class(成员变量和成员方法)。

封装:将接口与实施细节分离。

继承:代码复用。

多态:实现了“是什么”与“怎样做”两个模块的分离。

可扩展:在需要时易于添加新功能。
一、upcasting

1.将子类的对象作为父类的对象使用。这就叫upcasting

2.子类的接口被窄化

3.为什么要upcasting

4.比较Music.java Music2.java

二、多态性

1.        多态性也叫动态绑定、推迟绑定、运行期绑定、晚绑定

2.        绑定(Binding):将一个方法调用同一个方法主体连接到一起。

3.        早期绑定:由编译器和链接程序,在程序运行以前执行绑定。主观上可以判断调用的是那个方法。

4.        动态绑定:绑定在运行期间进行。

l          必须能在运行期间判断对象的类型,并分别调用相应的方法。

5.        Java中,除非一个方法已被声明成finalstatic,否则方法的绑定就是动态绑定。

6.        声明成final的方法的好处:防止其他人覆盖那个方法;关闭动态绑定,提高效率。

Shapes.java

三、可扩展

Music3.java

四、覆盖与过载(注意private方法)

1.        过载”是指同一样东西在不同的地方具有多种含义;

2.        “覆盖”是指它随时随地都只有一种含义,只是原先的含义完全被后来的含义取代了。

五、抽象类和抽象方法

1.        abstract关键字来修饰一个类时,这个类叫做抽象类;它包含有0个或多个抽象方法。不能创建属于它的对象,只能被继承。

2.        abstract来修饰一个方法时,该方法叫做抽象方法。只含有一个声明,没有方法主体。

3.        含有抽象方法的类必须被声明为抽象类。

4.        如从一个抽象类继承,而且想生成新类型的一个对象,就必须实现父类中的所有抽象方法。如果不这样做,子类也会是抽象的。

5.        一个类抽象以后,并不会强迫我们将它的所有方法都同时变成抽象。

六、构建器和多形性

1.          构建器的调用顺序:Sandwich.java

初始化总结

例:Beetle.java

1、   运行Beetle时(java Beetle),首先装载程序根据Beetle.main到外面找到Beetle.class类。

2、   在装载过程中,装载程序注意它有一个父类Insect,无论是否准备生成Insect的一个对象,都会将Insect.class载入。若Insect也含有父类,则Insect的父类随即也会载入,以此类推。

3、   在根父类(此时是Insect)执行static成员变量初始化,再在下一个子类执行,以此类推。

4、   创建对象。

l          首先,子类中的所有基本数据类型都会设成它们的默认值,而将对象句柄设为null

l          调用父类构建器:构建器采用与子类构建器完全相同的处理过程;父类的非static成员变量执行规定初始化。创建父类对象。

l          子类的非static成员变量执行规定初始化。

l          最后,执行构建器剩余的主体部分,创建子类对象。

2.          继承与清理:Frog.java

在自己定义清除方法时,子类覆盖了父类的清除方法,一定要记住记住在子类的清除方法中调用父类的。

3.          构建器内部的多形性方法的行为:PolyConstructors.java

设计构建器时一个特别有效的规则是:用尽可能简单的方法使对象进入就绪状态;如果可能,避免调用任何方法。在构建器内唯一能够安全调用的是在基础类中具有final属性的那些方法

七、通过继承进行设计

1.          用继承表达行为间的差异,并用成员变量表达状态的变化。

2.        纯继承与扩展

3.        下溯造型与运行期类型标识

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值