java编程思想笔记--多态部分一

1.方法调用绑定:

绑定就是将一个方法调用同一个方法主体关联起来。例如,一个方法的参数是一个Instrument接口,如果有两个类都引用了Instrument接口,Piano和Violet那么,在编译链接的时候,无法确定方法传入的到底是哪一个,只有到了程序执行的时候,执行到这个方法,才能确定到底是哪个类,才能完成具体的类和这个方法的绑定。

绑定分为前期绑定和后期绑定。前期绑定就是在程序执行前,在编译链接的时候就能进行绑定的过程。后期绑定则是在程序运行时根据对象的类型进行确定。

在面向过程的语言中,都是使用前期绑定的方式,例如c语言。而在java语言中,除了staticfinal方法,(private方法属于final方法)之外,其他所有的方法都是后期绑定

虽然使用final的方法会因为前期绑定的原因提高效率,但是,大多数情况下,这对提高程序的性能不会有多大的影响。因此,应当根据具体试图的需要决定是否使用final,而不是出于试图提高性能的目的来使用final。

2.一个父类Instrument的子类Wind,以及Wind的子类WoodWind,都可以向上转型到Instrument。

3.不能覆盖私有方法,也就是说,只有非private方法才能被覆盖。如下:

package test;

public class p156{
	private void f(){
		System.out.println("private f()");
	}
}
class Test extends p156{
	public void f(){
		System.out.println("public f()");
	}
	public static void main(String args[]){
		p156 test=new Test(); 
		test.f();
	}
}

当然,这段代码是不能编译通过的,因为在一个类的子类中,是无法去调用父类的私有方法的。

但是,可以说明一个问题就是,一个父类的private方法,是不能被覆盖的。因为所有的private方法实质上都是final的,也就是说,是不能被覆盖的。

4.多态只是针对方法而言的,对于属性来说,不存在多态的概念,如下:

package test;

public class p156_2{
	public int size=5;
	public static void main(String args[]){
		p156_2 test=new Test();
		System.out.println(test.size);
	}
}

class Test extends p156_2{
	public int size=10;
}

打印出来的不会是子类的属性,而是父类的属性值5,因为多态只是针对方法而言的。

5.对于静态方法来说,因为静态方法是与类绑定的,而不是与对象绑定的,因此,静态方法也不会具有多态的特点。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值