【Thinking In Java笔记】多态

本文详细阐述了Java中多态的概念,包括分离做什么和怎么做、向上转型、行为与状态的区分、绑定类型(前期与后期)、构造器调用顺序等关键点。深入探讨了多态如何提高代码的组织结构、可读性和可扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第八章:多态

1 多态通过分离做什么和怎么做来将接口和实现分离出来,其作用是消除对象之间的耦合关系,它能改善代码的组织结构和可读性,可以创建出可扩展程序(可生长程序)。
2 把某个对象的引用视为对其基类对象的引用的做法称作向上转型,因为继承树的画法中,基类是放在上方的。
3 用继承表达行为间的差异,用字段表达状态上的变化。
4 将一个方法调用同一个方法主体关联起来称作绑定。
如果程序执行前进行绑定,叫做前期绑定,如C语言只有一个方法调用。
Java中除了STATIC和FINAL方法(private方法属于FINAL方法)之外,其他所有方法都是后期绑定。其实申明某个方法为FINAL,就是可以有效的关闭动态绑定,防止其他人覆盖该方法。
例子:
public class Test {
	private void f(){
		System.out.println("parent");
	}
	
	public static void main(String[] args) {
		Test t = new T();
		t.f();
	}
}
class T extends Test{
	public void f(){
		System.out.println("child");
	}
	
}
由于private被自动认为FINAL属性,所以他对导出类是屏蔽的。即f这个方法是前期绑定,被绑定到了Test这个类上。同理STATIC是前期绑定的,它并不是与实例化的对象相关联的,即STATIC的方法是绑定到实例化对象之前的类上面的,所以STATIC是类相关的,他的行为不具有多态性。所以,只有普通方法的调用可以是多态的。(本例子结果parent)
5 基类的构造器总是在导出类的构造过程中被调用,因为导出类只能访问他自己的成员,不能访问基类成员,所以只有基类构造器才能对自己正常的初始化。即这个是Java保证所有的变量在使用前都得到恰当的初始化所要求的。
6 构造器调用顺序例子:
class a{a(){System.out .print("a" );}}
class b{b(){System.out .print("b" );}}
class c{c(){System.out .print("c" );}}
class d{d(){System.out .print("d" );}}
class e extends a{e(){System.out.print("e");}}
class f extends e{f(){System.out.print("f");}}
public class g extends f {
	public g() {
		System.out.print("g");
	}
	private b bb = new b();
	public static void main(String[] args) {
		new g();
	}
}
结果:aefbg
构造器调用顺序:1)调用基类构造器 2)按声明顺序初始化成员 3)调用到导出类构造器的主体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值