基础不扎实的朋友应该会有一个疑问,当super和this都可以用的时候,到底我们是用super调用父类方法还是用this呢?
这里其实是分两种情况的:
当子类重写了父类的方法时,如果需要用到父类的方法时,才要用super,表明这个方法时父类的方法不是子类的方法。上代码:
Father类
- public class Father {
- public String str = "父类变量";
- public String strOnly = "父类变量,子类没有同名变量";
- public void printf(String str){
- System.out.println(str+"这是父类的方法");
- }
- public void printfOnly(String str){
- System.out.println("这是父类的方法,子类没有重写的方法====>"+str);
- }
- }
- public class Son extends Father{
- public String str = "子类变量";
- public void printf(String str){
- System.out.println(str+"这是子类的方法");
- }
- public void test() {
- printf("什么都不使用=======>");
- this.printf("使用this=======>");
- super.printf("使用super=======>");
- printfOnly("子类没重写,就会调用父类的方法");
- System.out.println("str is ===========>"+str);
- System.out.println("super.str is ===========>"+super.str);
- System.out.println("子类没有同名变量,就会去找父类的变量 ===========>"+strOnly);
- }
- public static void main(String[] args) {
- Son son = new Son();
- son.test();
- }
- }
- 什么都不使用=======>这是子类的方法
- 使用this=======>这是子类的方法
- 使用super=======>这是父类的方法
- 这是父类的方法,子类没有重写的方法====>子类没重写,就会调用父类的方法
- str is ===========>子类变量
- super.str is ===========>父类变量
- 子类没有同名变量,就会去找父类的变量 ===========>父类变量,子类没有同名变量
子类重写printf方法,如果需要调用父类的方法就要加super,否则,默认调用子类的方法。对于变量也是一样。
转载自:https://blog.csdn.net/doye_chen/article/details/78887382