IntelliJ IDEA中父类方法断点为何对子类对应方法生效?
父类方法断点对子类重写方法生效的原因
在IntelliJ IDEA调试Java代码时,若在父类的方法上设置方法断点(method breakpoints),即便声明并实例化的是子类对象,调用重写后的对应方法时,程序也会自动在子类的方法第一行暂停。
示例代码
public class Debug02 { public static void main(String[] args) { Son instance = new Son(); instance.test(); } } class Father{ public void test(){//add method breakpoints here System.out.println("Father : test1"); System.out.println("Father : test2"); } } class Son extends Father{ @Override public void test(){ System.out.println("Son : test1"); System.out.println("Son : test2"); } }
原因解析
- 方法断点基于方法签名匹配:父类的
test()方法和子类重写的test()方法签名完全一致(返回值类型、方法名、参数列表均相同),IDEA的方法断点会匹配所有符合该签名的方法调用,自然包含子类的重写实现。 - Java多态特性的关联:当调用
instance.test()时,实际执行的是子类Son的test()方法,但该方法是对父类同名方法的重写,方法断点会关联整个方法继承链中匹配的方法实现。 - IDEA调试器的监听逻辑:方法断点会监听JVM中所有执行该方法签名的调用事件,无论方法属于父类还是子类,只要签名匹配,就会触发断点暂停。
内容的提问来源于stack exchange,提问作者gxx
相关产品推荐
相关产品推荐

