java的super关键字和this指针

来源:互联网 发布:伦佐皮亚诺 知乎 编辑:程序博客网 时间:2024/06/07 05:38
1.什么是super?什么是this
super关键字表示超(父)类的意思。this变量代表对象本身。

2.使用super&this调用成员变量和方法
可以使用super访问父类被子类隐藏的变量或覆盖的方法。当前类如果是从超类继承而来的,当调用super.XX()就是调用基类版本的XX()方法。见示例1
当类中有两个同名变量,一个属于类(类的成员变量),而另一个属于某个特定的方法(方法中的局部变量),使用this区分成员变量和局部变量。见示例2

示例1:
class Person {    protected void print() {       System.out.println("The print() in class Person.");    }} public class DemoSuper extends Person {    public void print() {       System.out.println("The print() in class DemoSuper.");       super.print();// 调用父类的方法    }     public static void main(String[] args) {       DemoSuper ds = new DemoSuper();       ds.print();    }}


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

3.使用this表示当前调用方法的对象引用
假设你希望在方法的内部获得对当前对象的引用,可使用关键字thisthis关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。见示例3
示例3:
Button bn;…bn.addActionListener(this);

4.使用super&this调用构造子
super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)。见示例4
this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)。 见示例5

示例4:
class Person {    public static void prt(String s) {       System.out.println(s);    }     Person() {       prt("A Person.");    }     Person(String name) {       prt("A person name is:" + name);    }} public class Chinese extends Person {    Chinese() {       super();// 调用父类构造函数。       prt("A chinese.");    }     Chinese(String name) {       super(name);// 调用父类具有相同形参的构造函数。       prt("his name is:" + name);    }     public static void main(String[] args) {       Chinese cn = new Chinese();       cn = new Chinese("kevin");    }}


示例5:
Point(int a,int b){    x=a;    y=b;}Point(){    this(1,1); //调用point(1,1),必须是第一条语句。}


5.使用super&this应该注意些什么?
1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
 
2super()this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
 
3super()this()均需放在构造方法内第一行。
 
4)尽管可以用this调用一个构造器,但却不能调用两个。
 
5thissuper不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
 
6this()super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
 
7)从本质上讲,this是一个指向本对象的指针然而super是一个Java关键字。
6.参考资料
[1]Thinking in Java 3rd
[2] this super java里使用时应注意的地方
    http://hengdao325200.blog.163.com/blog/static/340522006626114027






0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 vr游戏过后想吐怎么办 win10电脑不能打汉字怎么办 手机看vr特别烫怎么办 苹果手机浏览器横屏怎么办 苹果笔记本浏览器没有了怎么办 剑与家园魔镜带错兵怎么办 橙子vr上下反了怎么办 我的恐龙手机不支持ar怎么办 被小人陷害又无计可施怎么办 蚂蚁借呗2万逾期怎么办 蚂蚁借呗还款金额受限怎么办 蚂蚁借呗不能借钱了怎么办 美柚手机号换了怎么办 美柚他他圈被禁言了怎么办? 被蝎子蜇了屁股怎么办 被蝎子蛰了该怎么办 孕妇让蝎子蛰了怎么办 脸被蝎子蛰了怎么办 皮肤看着有点老怎么办 王者铭文被卖了怎么办 游戏cp送我皮肤怎么办 消防改革武警学院的学员怎么办 几把毛掉的厉害怎么办 从公务员调入事业单位的怎么办 电车被城管扣了怎么办 超变战陀发射器绳坏了怎么办 家里人总打击我怎么办干啥都要骂 欧陆风云4破产后怎么办 车被别人喷了漆怎么办 龙分期绑银行卡维护钱还不上怎么办 去维和要是伤了怎么办 头盔镜片刮花了怎么办 小牛u1钥匙丢了怎么办 非牛顿流体干了怎么办 刺激战场0信誉分怎么办 假如非牛顿干了怎么办? 退出id后照片了怎么办 小麦收割机麦糠有籽粒怎么办 在家带娃没钱花怎么办 看3d电影近视的怎么办 摩托车电瓶没电了怎么办