一段代码带你彻底弄清在java中super和this的区别究竟是什么?

class Person { 
    //如果在父类中定义了公共的静态方法 那么父类子类都可以直接在任何位置直接调用
    public static void prt(String s) { 
       System.out.println(s); //功能时打印传递进来的字符串
    } 
    //父类构造方法1(没有参数)
    Person() { 
       prt("父类中无参数的构造方法Person()被调用了"); 
    }
    //父类构造方法2(有一个参数) 
    Person(String name) { 
       prt("父类中含一个参数的构造方法Person(String Name)被调用了!这个参数是:" + name); 
    }
    //构造方法的名字和所属类的名字相同 通常在构造方法前不加任何修饰最多加一个public

    
public class Chinese extends Person { 
    //子类构造方法1(没有参数)
    Chinese() { 
       super(); // 调用父类构造方法1 小结:super()表示调用父类中没有参数的那个构造方法  
       prt("子类调用了父类中无参数构造方法"); 
    } 
    //定义构造方法2(含有一个字符串参数)
    Chinese(String name) { 
       super(name);// 小结:super(param)表示调用父类中具有相同的类型和个数的形参的构造方法(父类构造方法2) 
       prt("子类调用了父类中含一个字符串参数的那个构造方法,这个方法是:Person(String Name)"); 
    } 
    //定义子类构造方法3
    Chinese(String name, int age) { 
       this(name);//小结:this(param)表示调用子类(本类)中具有相同个数和类型的形参的构造方法(子类构造方法2)
       prt("调用了子类(本类)中具有相同个数和类型的形参的构造方法,这个方法是:Chinese(String name)"); 
    } 
    //方法中写逻辑 逻辑装在方法中 逻辑会重复  所以经常在方法中调用别的方法从而不用重复写逻辑
    //在子类的某个构造方法中既需要调用自己的其他构造方法也需要调用父类的构造方法
    //父类或子类中可以以存在多个构造方法 这些构造方法的区别是形参的个数和类型不同


    public static void main(String[] args) { 
       Chinese cn = new Chinese(); 
       cn = new Chinese("csdn"); 
       cn = new Chinese("csdn", 18); 
    } 
}


运行结果:
        父类中无参数的构造方法Person()被调用了
        子类调用了父类中无参数构造方法


        父类中含一个参数的构造方法Person(String Name)被调用了!这个参数是:csdn
        子类调用了父类中含一个字符串参数的那个构造方法,这个方法是:Person(String Name)
    
        子类调用了父类中含一个字符串参数的那个构造方法,这个方法是:Person(String Name)
        调用了子类(本类)中具有相同个数和类型的形参的构造方法,这个方法是:Chinese(String name)
        


总结: super和this在调用构造方法上的区别是:
      1 super()表示调用父类中没有参数的那个构造方法
      2 this()表示调用本类中没有参数的那个构造方法
      3 super(param)表示调用父类中具有相同的类型和个数的形参的构造方法
      4 this(param)表示调用子类(本类)中具有相同个数和类型的形参的构造方法


注意: 真正掌握两者区别,一定要熟记这个代码段
      
        

猜你喜欢

转载自blog.csdn.net/weixin_42204641/article/details/81054291
今日推荐