A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刚刚整理的        求大神勿喷学渣
super和this的区别:

        1.this始终是指向本类的成员:
                1).访问本类的成员;
                class A{
                        int num = 10;
                        void f1(){
                                System.out.println("num = " + this.num);
                                this.f2();//调用本类的f2()方法
                        }
                        void f2(){
                        }
                }
                2).在本类的构造方法中,调用本类其它的构造方法;
                        class A{
                                A(){
                                        System.out.println("a1");
                                       
                                }
                                A(int b){
                                        this();//调用此类无参的构造方法;它必须是这个构造方法的第一条有效语句;
                                        System.out.println("a2");
                                }
                        }
                        main(){
                                A a = new A(2);

                        }
        2.super始终是指向父类的空间:
                1.通过super可以访问父类的成员:
(重点)        2.可以调用父类的构造方法;
                3.在子类中的构造方法,默认情况下会在第一行自动添加一句:super();//调用父类的无参的构造方法;
                4.注意:
                        如果父类没有无参的构造方法,那么子类的构造方法中,就必须使用super()去显示的去调用父类的某个
                        带参的构造方法;
                5.在子类的构造方法中调用父类的构造方法使用super().这里也要求super()必须是这个构造方法的第一句话;
                6.在子类的构造方法中,不能即使用this()又使用super();因为都需要在第一句话;
          

小结:
1.this可以访问本类成员属性和成员方法;调用本类其它构造方法
2.super可以访问父类的成员属性和成员方法;调用父类的构造方法;
3.有一个时候,需要我们在子类中必须显示的使用super()去调用父类的构造方法:
  当父类没有无参构造方法时:
        class A{
                A(int a){
                }
        }
        class B extends A{
                //不论子类中有多少个构造方法,每个构造方法内都要显示的去super(),调用父类带参构造方法;
                B(int n){
                        super(n);
                }
        }

1 个回复

正序浏览
加油不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马