Java父类方法:this与super关键字的调用差异
问题解答
给定代码
父类泛型类A:
public class A<T>{ public void print(){ System.out.println("Hi"); } }
子类B:
public class B extends A<Integer>{ }
两者的区别
在当前代码里,super.print() 和 this.print() 确实都能调用到A类的print()方法,但底层逻辑完全不同:
this.print():遵循Java的方法查找规则,先从当前类B开始找print()方法。因为B没重写这个方法,所以会顺着继承链往上找父类A的实现,最终调用到A的print()。super.print():直接绕过当前类的方法查找,直接去父类A中找print()方法并调用,不管子类有没有重写。
差异体现场景
如果给B类重写print()方法,两者的区别就会立刻显现:
public class B extends A<Integer>{ @Override public void print(){ System.out.println("Hello from B"); } }
此时:
- 调用
this.print()会输出Hello from B,优先使用子类的重写实现 - 调用
super.print()会输出Hi,强制使用父类的原始实现
内容的提问来源于stack exchange,提问作者Code123
相关产品推荐
相关产品推荐

