1.Blank Finals
public class BlankFinal {
private final int i;
private final Sample j;
// 未初始化的Final类型必须在每个构造器里都初始化
public BlankFinal() {
i = 1;
j = new Sample();
}
public BlankFinal(int x) {
i = x;
j = new Sample();
}
}
2.final参数
public class FinalArguments {
void Sample(final Object g) {
// final类型参数不能修改引用指向
g = new Student();
}
}
3.final方法
Class First {
private void f() {}
}
Class Second extends First{
private void f() {System.out.println("I override!");}
}
Public class Test {
Second s = new Second();
s.f();
First fr = new Second();
// fr.f() 会出错,因为你并未Override成功,成功调用的s.f()方法只是一个新的方法罢了,First的f()被private隐藏起来了。
}
1.final方法其实就是private方法,无法被Override,所以有private无需再加final。
2.private方法不可Override。
final类
不可被继承(就是不可被修改)。
P189页讲了在java 1.0/1.1 library里面Vector方法都是final的,然而Stack还继承了Vector。后来用ArrayList取代了Vector。同时用HashMap取代了Hashtable(方法命名问题)。