Java中this和super的用法

1、什么是super?什么是this?

this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针。
super可以理解为是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。

2、使用super&this调用成员变量和方法

2.1、可以使用super访问父类的方法,以及被子类覆盖的方法。如果类是从父类继承而来的,当调用super.XX()就是调用上一父类的XX()方法。见例子:

class Person{
    protected void show(){
        System.out.print("show in class Person");
    }
}

public class Student extends Person{
    @override
    public void show(){
        System.out.print("show in class Student");
        super.print();//调用父类的方法
    }
    public static void main(String[] args){
        Student s=new Student();
        s.show();
    }
}

运行结果:
show in class Student
show in class Person


2.2、当类中有两个同名变量,一个属于类的成员变量,另一个属于某个方法的局部变量,使用this来区分成员变量和局部变量。见例子:

public class DemoThis {
    private String name;

    public void setName(String name) {
       this.name = name;// 前一个name是private name;后一个name是setName中的参数。
    }
}

3、使用this表示当前调用方法的对象引用

假设你希望在方法的内部获得对当前对象的引用,可以使用this。this枝能在方法内部使用,表示对“调用方法的那个对象”的引用。见例子:

/**
* 使用this代表自身类的对象
*/
public class ReferenceObject {
ReferenceObject instance;
public ReferenceObject(){
instance = this;
}
public void test(){
System.out.println(this);
}
}

在构造方法内部,将对象this的值赋值给instance,在test方法内部,输出对象this的内容,这里的this都代表自身类型的对象。

4、使用super和this调用构造函数

super:调用父类中的构造函数
this:调用本类中的构造函数。

class Person { 
    public static void prt(String s) { 
       System.out.println(s); 
    } 

    Person() { 
       prt("父类·无参数构造方法: "+"A Person."); 
    }//构造方法(1) 

    Person(String name) { 
       prt("父类·含一个参数的构造方法: "+"A person's name is " + name); 
    }//构造方法(2) 
} 

public class Chinese extends Person { 
    Chinese() { 
       super(); // 调用父类构造方法(1) 
       prt("子类·调用父类”无参数构造方法“: "+"A chinese coder."); 
    } 

    Chinese(String name) { 
       super(name);// 调用父类具有相同形参的构造方法(2) 
       prt("子类·调用父类”含一个参数的构造方法“: "+"his name is " + name); 
    } 

    Chinese(String name, int age) { 
       this(name);// 调用具有相同形参的构造方法(3) 
       prt("子类:调用子类具有相同形参的构造方法:his age is " + age); 
    } 

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

5、使用super和this应该注意什么

1.调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐式地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。


2.super()和this(),区别是,super从子类中调用父类的方法,this只调用本类的方法。


3.super()和this()均需放在构造方法内的第一行。


4.尽管可以用this调用一个构造器,但却不能调用两个。


5.this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。


6.this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。


7.从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。


参考文献
Blog:
1、http://zhangjunhd.blog.51cto.com/
2、http://zhangjunhd.blog.51cto.com/113473/20531/
3、http://www.cnblogs.com/hasse/p/5023392.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值