首页 > 其他 > 详细

this和super

时间:2016-02-14 18:11:54      阅读:118      评论:0      收藏:0      [点我收藏+]

1.this

* 每个类的每个非静态方法(没有被static修饰)都会隐含一个this引用名称,它指向调用这个方法的对象。
* 当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。
* this可以看作是一个变量,它的值就是当前对象的引用
* this.属性/方法   表示调用当前属性或方法

例:

//Person类的构造方法
public Person(String name, boolean sex, int age){
    this.name = name;
    this.sex = sex;
    this.age = age;
}

 

2.this+构造方法

* 如果某个构造方法的第一条语句具有形式this(...),那么这个构造方法将调用本类中的其他构造方法。
* this(xxxx);   构造函数的调用, 注意点:this(xxx) 必须是第一行

例:

//Person类的构造方法1
public Person(String name, boolean sex, int age){
    this.name = name;
    this.sex = sex;
    this.age = age;
}
    
//构造方法2-调用构造方法1
public Person(){
    this("张三","男",18);
}

 

3.super

* super代表父类的对象
* super只能在类的内部使用
* super可以跳过一层继承调用,即调用父类的父类
* 在Java类中使用super来引用父类的成分
* super可用于访问父类中定义的属性
* super可用于调用父类中定义的成员方法
* super可用于在子类构造器中调用父类的构造器

**super只能应用在成员方法和构造方法中,不能应用在静态方法中(和this是一样的),如果在构造方法中使用必须放在第一行**

例:

>Father类

        public Father(String fatField){
            this.fatField = fatField;
        }

        eat(){}

>son类

        private String sonField;
        public Son(String field){
            //super();  //默认调用空参的父类构造函数
            super(field);  //调用父类的带参数的构造函数
            this.sonField = field;
        }

        eat(){
            super.eat(); //调用父类的成员方法,不需要放在第一行
            其他方法
        }

 

4.注意

##为什么子类会自动调用父类的构造函数???
原因:子类的所有构造函数中的第一行,其实都有一条隐身的语句super();
解释:
super()表示父类的构造函数并会调用于参数相对应的父类中的构造函数。子类中,它在调用父类中空参数的构造函数。因为子类继承父类,会继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程。
特注:
1、子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();
2、若父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数;
3、若子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数。

5.this和super关键字对比

技术分享

 

this和super

原文:http://www.cnblogs.com/anni-qianqian/p/5189240.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!