posts - 12,  comments - 0,  trackbacks - 0
  2007年12月23日
方法调用的绑定:
将方法的调用连到方法本身被称为“绑定”。当绑定发生在程序运行之前时,被称作“前绑定”。
后绑定也称为“动态绑定”或“运行时绑定”,指程序运行的时候,根据对象的类型来决定该绑定哪个方法。如果语言实现了后绑定,那它就必须要有能在运行时判断对象类型,并且调用其合适方法的机制。也就是说编译器还是不知道对象的类型,但是方法的调用机制会找出,并且调用正确的方法。
除了static和final方法(private方法隐含有final的意思),java的所有的方法都采用后绑定。也就是说,通常情况下你不必考虑是不是应该采用后绑定--它是自动的。 为什么要声明final方法,上一章指出,这样可以禁止别人覆写这个方法,不过更重要的可能还是要“关闭”它的动态绑定,或者理确切的说,告诉编译器这里不需要使用后绑定。
shape为circle的基类,下面这句就是在“上传”:
Shape s = new Circle();
这里先创建了一个Circle对象,接着马上把它的引用赋给了Shape,看上去这像是一个错误(一种类型怎么能赋给另一种);但是由于Circle是由Shape派生出来的,Circle就是一种Shape,因此这种做法是非常正确的。假设你调用了一个基类的方法:s.draw();这里派生类里已经覆写了此方法,那么可能你会认为,这次应该总调用Shape的draw()了吧,因为毕竟这是Shape的引用,但是由于实现了后绑定(多态性),实际上它会调用Circle.draw().
posted @ 2008-01-05 19:18 仰望者 阅读(198) | 评论 (0)编辑 收藏
1、 float f=1.3;
    是不对的,编译时会出错,java认为1.3是double型的,所以定义时应写成:float f=1.3f,或float f= (float)1.3;
2、 byte b = 3;  b=b*3;
    是不对的,原因是在*运算过程中,java会做类型的提升,将b提升为int型,所以应改为:b=(byte)(b*3);
3、 while(1),if(1)
    是不对的,原因是java中布尔型只有true 和false两个值,这里与C语言不同,只能用while(true)..
4、 数组声明:int num[3];
    这是不对的,java中声明数组时不应对空间限定,正确的语法应是:
    int[] num = new int[3];
    或
    int[] num;
    num = new int[3];
5、数组初始化:int[] num;
               num {1,3,4,4};
   是不对的,应在定义的时候初始化。如:int[] num={1,3,4,4};
6、int[] num3 =new int[]{1,2,3};
   int[] num5 =new int[3]{1,2,3};
   int[] num3 =new int[]{1,2,3};是对的。
    int[] num5 =new int[3]{1,2,3};是错的。已经初始化的数组,不应再列明:[3]
       


posted @ 2007-12-23 23:01 仰望者 阅读(147) | 评论 (0)编辑 收藏