最骚操作:
public abstract class Animal { public abstract void eat(); // 必须重写 public final void breathe() { // 禁止修改 System.out.println("氧气是人类的朋友"); } }
设计哲学:
呼吸方法final:生命不可儿戏
进食方法abstract:允许自由发挥
2. 死亡组合:
private final static String DNA = "ATCG";
四重封印:
私有访问 + 不可修改 + 类级别存在 + 常量
五、避坑
final偷袭:重写final方法时,编译器会露出姨母笑(报错)
静态伪装:以为重写static方法,实际是创建新方法
跨包悲剧:用默认修饰符写的方法,在其他包无法多态
private假动作:子类定义同名方法≠重写,是平行世界的新方法
六、多态机制:
一.影帝的千面人生
1. 动态绑定(幕后特效)
Animal animal = new Cat(); animal.eat(); // JVM通过虚方法表查找Cat.eat()
JVM原理:虚方法表(vtable)实现运行时查找
性能优化:HotSpot虚拟机的内联缓存(Inline Cache)
2. 转型操作(换装魔法)
// 向上转型(自动)
Actor actor = new StuntDouble();
// 向下转型(需显式) if(actor instanceof StuntDouble) { StuntDouble sd = (StuntDouble)actor; sd.dangerousAction(); }
ClassCastException:Spring框架的Bean转型异常处理
类型检查:Apache Commons的ClassUtils工具类封装
3. 构造器陷阱(时间悖论)
`class Father {
public Father() {
init(); // 危险操作!
}
public void init() { /.../ }
}
class Son extends Father {
private String data;
@Override
public void init() {
System.out.println(data.length()); // NPE!
}
}对象初始化顺序:父类构造器→子类成员变量初始化→子类构造器 安全规范:《Effective Java》条款19:禁止在构造器中调用可重写方法 二、实战:剧组生存指南 1. 防御式编程public final class SafeActor {
// 防止恶意子化
private final Object lock = new Object();