super详解

Posted H.「俠」

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了super详解相关的知识,希望对你有一定的参考价值。

super详解

super注意点

  • super调用父类构造方法,必须只能出现在子类构造方法中!构造方法!构造方法!

  • super调用父类构造方法时,必须在子类构造方法体代码的第一行!第一行!第一行!

  • super()与this()不能同时存在,他们都得放在方法体代码第一行,“一山不容二虎”

    • 代码示例:

  public Students() {
//       this("you");//子类调用自己有参构造器(注意不能同时再调用父类构造器,一“行”不容二码)
       super();//隐藏代码(默认调用无参父类构造器,可不写),调用父类无参构造器,且必须放在构造方法体代 码第一行
       System.out.println("先调用父类构造器,然后打印Students无参构造器");
  }

 


super VS this

  • 代表的对象不同

    • this代表本身调用者这个对象

      • 调用类对象本身的方法

            public void setName(String name) {// Alt + Ins
               this.name = name;
               this.study("lee");
          }

           public void study(String name){
        //       this.name = name; //给Students的name属性重新赋值
               System.out.println("study中 .......");
               System.out.println("传入的name属性参数:" + name);//name:传入的参数
               System.out.println("this: "+this.name+"努力学习");//this.name:当前类的name属性
               System.out.println("super:"+ super.name + "qinjiang老师努力的教");//super.name:父类的name属性
          }

         

      • 调用类对象本身的属性

    • super代表父类对象的引用

      • 代码示例:

      public Students(String name) {
             super(name);//调用父类有参构造方法
             this.name = name ;
             super.print();//调用父类方法
        }
  • 前提也不一样

    • this:在没有继承的时候也可以使用

    • super:必须有继承关系,继承条件下才可以在子类中使用

  • 调用构造方法不同

    • this:调用本类的构造方法

      • 普通调用:

           public Students() {
               this("you");//子类调用自己有参构造器(注意不能同时再调用父类构造器)
        //       super();//隐藏代码(默认调用无参父类构造器,可不写),调用父类无参构造器,且必须放在构造方法体代码第一行
               System.out.println("先调用父类构造器,然后打印Students无参构造器");
          }

           public Students(String name) {
               super(name);
               this.name = name ;
               super.print();

         

      • 进阶调用:

        public class Students extends Person{ //子类Students继承了父类Person
           private String name ; //私有化name属性,只能在该类的方法或者构造方法中调用
           public int age ;

           public Students() {
               this("you");//子类调用自己有参构造器(注意不能同时再调用父类构造器)
        //       super();//隐藏代码(默认调用无参父类构造器,可不写),调用父类无参构造器,且必须放在构造方法体代码第一行
               System.out.println("先调用父类构造器,然后打印Students无参构造器");
          }

           public Students(String name) {
        //       super(name);
               this("lee",18);
        ////       super();
               this.name = name ;
        //       super.print();
          }
           public Students(String name,int age){
               this.name =name;
               this.age = age;
               System.out.println(this.name+"有"+this.age+"岁了吧");
          }

           public void setName(String name) {// Alt + Ins
               this.name = name;
          }

           public void study(String name){
        //       this.name = name; //给Students的name属性重新赋值
               System.out.println("study中 .......");
               System.out.println("传入的name属性参数:" + name);//name:传入的参数
               System.out.println("this: "+this.name+"努力学习");//this.name:当前类的name属性
               System.out.println("super:"+ super.name + "qinjiang老师努力的教");//super.name:父类的name属性
          }

         

      •  

以上是关于super详解的主要内容,如果未能解决你的问题,请参考以下文章

super详解

super详解 2021-06-10

详解Java中super的几种用法并与this的区别

(转) Java中的负数及基本类型的转型详解

片段中的Android onActivityResult

配置更改后片段丢失过渡动画