//Final and Private
/**
* Exercise 20: (1) Show that @Override annotation solves the problem in this section.
* 这部分讲的是final和private, 只要是private的方法, 实际上都是final的. 因为private方法是无法访问的,
* 连访问都无法访问, 更不用说改变了. 所以, private method是"无法改变的".
*/
package reusing;
class P187{
private final void f(){
System.out.println("private final P187.f().");
}
private void g(){
System.out.println("private P187.g().");
}
final void h(){
System.out.println("final P187.h().");
}
}
public class P187E20 extends P187{
private final void f(){
System.out.println("private final P187E20.f().");
}
private void g(){
System.out.println("private P187E20.g().");
}
//!下面代码不能执行, 因为super的h()已经是final了, 在子类中是不能改变h()的.
//即使使用了@Override也不行
/* final void h(){
* System.out.println("final P187E20.g().");
* }
*/
//! @Override final void h(){ }
public static void main(String[] args) {
// TODO Auto-generated method stub
P187E20 x=new P187E20();
x.f();
x.g();
P187 y=x; //这里有个upcast
//无法编译下面代码,
//!y.f();
//!y.g();
//y.h()可以, 虽然h()是final--不可改变, 但是h()是可读的
y.h();
}
}
187页的20和21题 --P187E20
最新推荐文章于 2024-04-22 12:18:41 发布