精华内容
下载资源
问答
  • this super 关键字作用   this 是对象内部指代自身的引用,同时也是解决成员变量局部变量同 名问题;this 可以调用成员变量,不能调用局部变量;this 也可以调用成员 方法,但是在普通方法中可以省略 this,在...

    this 和 super 关键字的作用
      this 是对象内部指代自身的引用,同时也是解决成员变量和局部变量同 名问题;this 可以调用成员变量,不能调用局部变量;this 也可以调用成员 方法,但是在普通方法中可以省略 this,在构造方法中不允许省略,必须是 构造方法的第一条语句。,而且在静态方法当中不允许出现 this 关键字。
      super 代表对当前对象的直接父类对象的引用,super 可以调用直接父 类的成员变量(注意权限修饰符的影响,比如不能访问 private 成员) super 可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访 问 private 成员);super 可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。

    展开全文
  • this和super关键字作用区别 this:是对象对自身的引用,没有继承也可以使用,调用本类的构造 super:对父类对象的引用,只能在继承条件下使用,调用父类的构造 super注意点: super调用父类的构造方法,必须在...

    this和super关键字的作用区别

    this:是对象对自身的引用,没有继承也可以使用,调用本类的构造

    super:对父类对象的引用,只能在继承条件下使用,调用父类的构造

    super注意点:

    1. super调用父类的构造方法,必须在构造方法的第一个。
    2. super只能出现在子类的方法或者构造方法中。
    3. super和this不能同时调用。
    展开全文
  • javathis和super用法 this和 super 关键字的区别
  • this和Super关键字this和Super关键字的对比Super关键字的用法如下:1. super关键字代表了父类空间的引用;2. super关键字作用:3. super关键字调用父类构造方法要注意的事项:this关键字的用法如下:1.了解没有 ...

    this和Super关键字的对比

    -thissuper()
    概念访问本类实列属性和方法有子类访问父类中的实列属性和方法
    查找范围先找本类,找不到再找父类找父类
    各异功能单独使用时,表示当前对象在子类重写父类方法时,访问父类同名方法
    相同点1.都是关键字,起指代作用2.在构造方法中必须出现在第一行

    Super关键字的用法如下:

    1. super关键字代表了父类空间的引用;

    2. super关键字的作用:

    (1) 子父类存在着同名的成员(包括变量和方法)时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员;
    (2) 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。
    (1) 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法内加上super()语句。
    (2) super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。
    (3) super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。
    (1) 代表的事物不一致。
    ① super关键字代表的是父类空间的引用。(并不能代表对象,只是代表一个对象中的一块内存而已)
    ② this关键字代表的是所属函数的调用者对象。
    (2) 使用前提不一致。
    ① super关键字必须要有继承关系才能使用。
    ② this关键字不需要存在继承关系也可使用。
    (3) 调用构造函数的区别:
    ① super关键字是调用父类的构造函数。
    ② this关键字是调用本类的构造函数。

    3. super关键字调用父类构造方法要注意的事项:

    注意:是两个关键字不能同时出现在同一个构造函数中去调用其他的构造函数,里面还是可以写this.num = num。并不是说不能出现this。

    this关键字的用法如下:

    1. this关键字可用来引用当前类的实例变量。
    2. this关键字可用于调用当前类方法(隐式)。
    3. this()可以用来调用当前类的构造函数。
    4. this关键字可作为调用方法中的参数传递。
    5. this关键字可作为参数在构造函数调用中传递。
    6. this关键字可用于从方法返回当前类的实例。
      建议:如果你是java初学者,只学习 this 关键字的前三个用法就可以了。
    1. this:引用当前类的实例变量 this关键字可以用来引用当前类的实例变量。如果实例变量和参数之间存在歧义,则 this 关键字可用于明确地指定类变量以解决歧义问题。

    1.了解没有 this 关键字的问题

    下面先来理解一个不使用 this 关键字的示例:

    class Student {
        int rollno;
        String name;
        float fee;
        Student(int rollno, String name, float fee) {
        rollno = rollno;
        name = name;
        fee = fee;
    	}
        void display() {
            System.out.println(rollno + " " + name + " " + fee);
        }
    }
    class TestThis1 {
    	public static void main(String args[]) {
    		Student s1 = new Student(111, "ankit", 5000f);
            Student s2 = new Student(112, "sumit", 6000f);
            s1.display();
            s2.display();
        }
    }
    

    执行上面代码输出结果如下 -

    0 null 0.0
    0 null 0.0
    

    在上面的例子中,参数(形式参数)和实例变量(rollno和name)是相同的。 所以要使用this关键字来区分局部变量和实例变量。

    使用 this 关键字解决了上面的问题

    class Student {
        int rollno;
        String name;
        float fee;
        Student(int rollno, String name, float fee) {
    	    this.rollno = rollno;
    	   	this.name = name;
            this.fee = fee;
        }
    	void display() {
            System.out.println(rollno + " " + name + " " + fee);
        }
    }
    class TestThis2 {
        public static void main(String args[]) {
            Student s1 = new Student(111, "ankit", 5000f);
            Student s2 = new Student(112, "sumit", 6000f);
            s1.display();
            s2.display();
        }
    }
    

    执行上面代码输出结果如下 -

    111 ankit 5000
    112 sumit 6000
    

    如果局部变量(形式参数)和实例变量不同,则不需要像下面的程序一样使用this关键字:

    2. 不需要 this 关键字的程序示例

    class Student {
       	int rollno;
        String name;
     	float fee;
    	Student(int r, String n, float f) {
       		rollno = r;
            name = n;
            fee = f;
        }
     void display() {
            System.out.println(rollno + " " + name + " " + fee);
     }  
    }
    
    class TestThis3 {
        public static void main(String args[]) {
            Student s1 = new Student(111, "ankit", 5000f);
            Student s2 = new Student(112, "sumit", 6000f);
            s1.display();
            s2.display();
        }
    }
    

    执行上面代码输出结果如下 -

    111 ankit 5000
    112 sumit 6000
    

    对变量使用有意义的名称是一种好的编程习惯。所以使用相同名称的实例变量和参数,并且总是使用this关键字。

    3. this:调用当前类方法

    可以使用this关键字调用当前类的方法。如果不使用this关键字,编译器会在调用方法时自动添加此 this 关键字。我们来看看这个例子。

    执行上面代码输出结果如下 -

    hello n
    hello m

    3. this():调用当前类的构造函数

    this()构造函数调用可以用来调用当前类的构造函数。 它用于重用构造函数。 换句话说,它用于构造函数链接。

    从参数化构造函数调用默认构造函数:

    class A {
        A() {
            System.out.println("hello a");
        }
    	A(int x) {
            this();
            System.out.println(x);
        }
    }
    
    class TestThis5 {
        public static void main(String args[]) {
            A a = new A(10);
        }
    }
    

    执行上面代码输出结果如下 -

    hello a
    10
    

    从默认构造函数调用参数化构造函数:

    class A {
        A() {
            this(5);
            System.out.println("hello a");
        }
    	A(int x) {
            System.out.println(x);
        }
    }
    
    class TestThis6 {
        public static void main(String args[]) {
            A a = new A();
        }
    }
    

    执行上面代码输出结果如下 -

    5
    hello a
    

    4. 使用this()构造函数调用

    this()构造函数调用用于从构造函数重用构造函数。 它维护构造函数之间的链,即它用于构造函数链接。看看下面给出的示例,显示this关键字的实际使用。

    class Student {
        int rollno;
        String name, course;
        float fee;
     	Student(int rollno, String name, String course) {
            this.rollno = rollno;
            this.name = name;
            this.course = course;
        }
    	Student(int rollno, String name, String course, float fee) {
            this(rollno, name, course);// reusing constructor
            this.fee = fee;
    	}
    	void display() {
            System.out.println(rollno + " " + name + " " + course + " " + fee);
    	}
    }
    
    class TestThis7 {
        public static void main(String args[]) {
            Student s1 = new Student(111, "ankit", "java");
            Student s2 = new Student(112, "sumit", "java", 6000f);
            s1.display();
            s2.display();
        }
    }
    

    执行上面代码输出结果如下 -

    111 ankit java null
    112 sumit java 6000
    

    注意:调用this()必须是构造函数中的第一个语句。

    下面示例为不把 this() 语句放在第一行,因此编译不通过。

    class Student {
        int rollno;
        String name, course;
        float fee;
    	Student(int rollno, String name, String course) {
    	        this.rollno = rollno;
    	        this.name = name;
    	        this.course = course;
    	}
    	Student(int rollno, String name, String course, float fee) {
    	        this.fee = fee;
    	        this(rollno, name, course);// C.T.Error
    	}
    	void display() {
            System.out.println(rollno + " " + name + " " + course + " " + fee);
        }
    }
    
    class TestThis8 {
        public static void main(String args[]) {
            Student s1 = new Student(111, "ankit", "java");
            Student s2 = new Student(112, "sumit", "java", 6000f);
            s1.display();
            s2.display();
        }
    }
    

    执行上面代码输出结果如下 -

    Compile Time Error: Call to this must be first statement in constructor
    

    4. this:作为参数传递给方法

    this关键字也可以作为方法中的参数传递。 它主要用于事件处理。 看看下面的一个例子:

    class S2 {
        void m(S2 obj) {
            System.out.println("method is invoked");
        }
    	void p() {
            m(this);
        }
    	public static void main(String args[]) {
    	        S2 s1 = new S2();
    	        s1.p();
    	    }
    	}
    

    执行上面代码输出结果如下 -

    method is invoked
    

    这个应用程序可以作为参数传递:

    在事件处理(或)的情况下,必须提供一个类的引用到另一个。 它用于在多个方法中重用一个对象。

    5. this:在构造函数调用中作为参数传递

    也可以在构造函数中传递this关键字。 如果必须在多个类中使用一个对象,可以使用这种方式。 看看下面的一个例子:

    class B {
        A4 obj;
    	 B(A4 obj) {
            this.obj = obj;
        }
        void display() {
            System.out.println(obj.data);// using data member of A4 class
    	}
    }
    class A4 {
        int data = 10;
     	A4() {
            B b = new B(this);
            b.display();
        }
    	public static void main(String args[]) {
    	        A4 a = new A4();
    	}
    }
    

    执行上面代码输出结果如下 -

    10
    

    6. this关键字用来返回当前类的实例

    可以从方法中 this 关键字作为语句返回。 在这种情况下,方法的返回类型必须是类类型(非原始)。 看看下面的一个例子:

    作为语句返回的语法

    return_type method_name(){  
        return this;  
    }
    

    从方法中返回为语句的 this 关键字的示例

    class A {
        A getA() {
            return this;
        }
    	void msg() {
    	        System.out.println("Hello java");
    	}
    }
    
    class Test1 {
        public static void main(String args[]) {
            new A().getA().msg();
        }
    }
    

    执行上面代码输出结果如下 -

    Hello java
    

    7. 验证 this 关键字

    现在来验证 this 关键字引用当前类的实例变量。 在这个程序中将打印参考变量,这两个变量的输出是相同的。

    class A5 {
        void m() {
            System.out.println(this);// prints same reference ID
        }
    	public static void main(String args[]) {
            A5 obj = new A5();
            System.out.println(obj);// prints the reference ID
            obj.m();
    	}
    }
    

    执行上面代码输出结果如下 -

    A5@22b3ea59
    A5@22b3ea59
    
    展开全文
  • 在静态方法当中不允许出现 this 关键字 super: 代表对当前对象的直接父类对象的引用 可以调用父类的非 private 成员变量方法 super(); 可以调用父类的构造方法,只限构造方法中使用,且必须是第一条...

    this:

    • 对象内部指代自身的引用
    • 解决成员变量和局部变量同名问题
    • 可以调用成员变量
    • 不能调用局部变量
    • 可以调用成员方法
    • 在普通方法中可以省略 this
    • 在静态方法当中不允许出现 this 关键字

     

    super:

    • 代表对当前对象的直接父类对象的引用
    • 可以调用父类的非 private 成员变量和方法
    • super(); 可以调用父类的构造方法,只限构造方法中使用,且必须是第一条语句

     

     


    【Java面试题与答案】整理推荐

     

    展开全文
  • this和super关键字

    2019-08-13 15:47:42
    this和super关键字 ** 在java里,这个this和super我们学习过程中很容易把这俩忽略掉!!!       此篇博客将对this和super关键字进行剖析。将this和super放在同一块是因为这两需要...
  • Java中的this和super关键字 (1) this关键字 this关键字指代的是当前对象。即:哪个对象调用就表示那个对象。 this关键字只能用在类中方法里面,用于访问成员变量,方法中的成员变量前面都默认有一个this。注意:...
  • this和super 由于最近看源码的时候发现this关键字的出现频率颇高,可能是自己没有注意到的一个知识点,现在来补充记录一下。this和super一般是放在一起学习。 this this是用于访问本类中的成员变量,成员方法,...
  • this 和super关键字

    2018-12-08 17:12:00
    this关键字作用: 1.如果存在同名的成员变量与局部变量时,在方法内部默认的时访问的时局部变量,可以通过this关键字调用成员变量 2.在一个构造方法中调用另一个构造方法来初始化对象this关键字要注意的事项 1....
  • super:super关键字和this作用类似,将被隐藏的父类的成员变量成员方法变为可见,或者说用来引用被隐藏的父类的成员成员变量成员方法。 使用场景: 1.使用super和this调用成员变量方法 有时会遇到子类中的...
  • this和super关键字 this是自身的一个对象,代表对象本身可以理解为指代当前的对象,它可以调用当前对象的属性、方法构造方法,一般情况下可以省略,必须使用this的地方是区分出现名字重复的参数属性 与this...
  • This和Super关键字

    2017-03-10 14:11:55
    this关键字必须放在非静态方法里面 this关键字代表自身,在程序中主要的使用用途有以下几个方面: ? 使用this关键字引用成员变量 ? 使用this关键字在自身构造方法内部引用其它构造方法 ? 使用this关键字代表自身...
  • 在Java中每一个对象的内存模型都有一个this和super关键字this指代当前对象在内存中的引用地址。super指代父类对象在内存中的引用地址。 如果我子类的构建器中调用了父类的有参构建器,则不会调用父类的无参构建器...
  • java中super和this的异同 super在一个类中用来引用其父类的成员。...super关键字作用在于当前子类中覆盖了父类中的某个成员变量,或者重写了父类的某个成员方法时还能够访问到父类的成员变量成员方法。如...
  • super关键字this:代表本类对象的引用 super:代表父类存储空间的标识(可以理解为父类对象引用) - this和super的使用分别 成员变量: this.成员变量 - 访问本类成员变量 super.成员变量 - 访问父类成员变量 ...
  • this和super关键字的区别用法 this关键字的三种用法: this可以访问本类的成员变量: this.成员变量 一般用来区分同名的成员变量局部变量 this可以访问本类的成员访问: this.成员方法名(实参); this可以访问本类的...
  • this super关键字

    2011-12-29 13:54:51
    this和super关键字,其用法非常的相似。super用来代表父类,而this用来代表本类。 this()用于调用本类的构造。 super()用来调用父类的构造,必须出现在构造当中的第一行。 this. 用来调用本类的属性方法,可以...
  • java中this和super关键字 初学java的同学都知道,this代表当前对象自身,可以看作是当前对象的虚拟地址(尽管不是,当前可以这么理解).后面再做详细讲解. 很多初学java的同学都习惯性的直译super关键字,认为super关键字...
  • this 关键字 this 关键字用于引用类的当前实例。 例如: class Manager { Employees[] employees; void manageEmployees() { int totalEmp = this.employees.length; System.out.pr...
  • 教妹学Java:学弟必须掌握的,this super 关键字.pdf
  • JAVA中this和super关键字

    2015-04-26 12:29:37
    super关键字表示超(父)类的意思。this变量代表对象本身。 2.使用super&this调用成员变量方法 可以使用super访问父类被子类隐藏的变量或覆盖的方法。当前类如果是从超类继承而来的,当调用super.XX()就是调用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,010
精华内容 52,404
关键字:

this和super关键字的作用