黑马程序员技术交流社区

标题: this和super的区别总结 [打印本页]

作者: xiaoya0o0o    时间: 2015-9-16 21:53
标题: this和super的区别总结
this和super的区别:

        1.this:
                1).每个类都有的一个隐式的变量;
                2).存储是当前对象的引用,是实例化此类的对象时,由JVM自动为其赋值的;
                3).this可以访问本类的成员变量、成员方法、构造方法;
                4).使用this()调用本类其它构造方法的注意事项:
                                A.this()调用其它构造方法,这种语句只能出现在某个构造方法中;
                                B.如果调用带参的构造方法,可以使用this(实参)方式调用;
                                C.构造方法不能"递归调用";
                                D.this()调用其它构造方法时,这种语句必须出现在这个构造方法的第一行有效语句;
                5).什么时候必须使用this:
                                A.局部变量覆盖成员变量;使用this访问被覆盖的成员变量;
                                B.在本类的一个构造方法中调用本类的另一个构造方法时。this()或this(实参)
        2.super:
                1).每个类都有的一个隐式的变量;
                2).存储的是父类对象的引用;是实例化子类对象时,由JVM自动为其赋值的;
                3).super可以访问父类的成员变量、成员方法、构造方法;
                4).使用super()调用父类的构造方法的注意事项:
                                A.super()调用父类构造方法的语句,只能出现在子类的某个构造方法内;
                                B.使用super(实参)可以调用父类带参数的构造方法;
                                C.super()调用父类的构造方法时,这条语句必须出现在子类构造方法的第一条有效语句;
                5).什么时候必须使用super:
                                A.子类成员覆盖了父类成员时,可以使用(super.父类成员)访问父类的被覆盖的成员;
                                B.如果父类中没有无参构造方法,子类的每个构造方法都必须的使用super(实参)调用父类中带参的构造方法;

        注意:在一个构造方法中,不能同时使用this()和super()。因为它们都需要在第一行有效语句;


--------------------------------------------this--------------------------------------------------
class Student
{
        String name;

        Student(){
        //        this("张三");//可以传递实参;
                System.out.println("无参构造方法");
        }
        Student(String name){
                //可以调用无参的构造方法
        //        Student();//调用构造方法不能使用这种语法

                this();//正确的。调用本类无参的构造方法;
                System.out.println("String参数的构造方法");
        }

        void show(){
        //        this();//错误,在普通方法中,不能调用构造方法;
                System.out.println("我叫:" + this.name);//可以访问本类的成员变量;
        }
        void fun(){
                this.show();//可以访问本类的其它成员方法;
        }
}
class ThisDemo
{
        public static void main(String[] args)
        {
                Student stu = new Student("张三");
        }
}
------------------------------------------------------super----------------------------------------
class Fu
{
        int num = 10;
        Fu(){
                System.out.println("Fu的构造方法");
        }
        Fu(int n){
                System.out.println("Fu的构造方法........."+n);
        }
        void show(){
                System.out.println("Fu的show()");
        }
}
class Zi extends Fu
{
        Zi(){
               
                super(22);//调用父类有参的构造方法
       
                System.out.println("Zi的构造方法");
               
        }
        Zi(String n){
                System.out.println("Zi的带参的构造方法");
        }

        void fun(){
                System.out.println("访问父类的成员变量:" + super.num);
                System.out.println("调用父类的成员方法:");
               
        }
}
class SuperDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi();

        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2