this和super关键字区别

本文详细解析了this和super关键字在Java中的作用,包括它们分别代表的对象、调用方法、构造函数的使用场景,并探讨了它们在类创建过程中的地位。还介绍了this和super的使用注意事项和类继承中的构造方法调用策略。
摘要由CSDN通过智能技术生成

一、this和super关键字区别

this表示当前对象:

this.属性 区别成员变量和局部变量
this.() 调用本类的某个方法
this() 表示调用本类构造方法,只能用在构造方法的第一行语句。
this关键字只能出现在非static修饰的代码中

super表示父类对象:

super.属性 表示父类对象中的成员变量
super.方法()表示父类对象中定义的方法
super() 表示调用父类构造方法
    可以指定参数,比如super("Tom",23);
    任何一个构造方法的第一行默认是super();
    可以写上,如果未写,会隐式调用super();
super()只能在构造方法的第一行使用。
this()和super()都只能在构造的第一行出现,所以只能选择其一。
写了this()就不会隐式调用super()。

二、this 与 super 的地位

首先我们需要回忆一个概念,所有对象的父类都是 Object 类,这就意味着,所有的对象实例化的时候都需要先调用 Object 的无参构造方法;
而连接对象和 Object 至少需要一条道路,而 this 和 super 就是这个最重要的桥梁;
而 this 和 super 两个往往身藏功与名,默默无闻,很多情况都可以省略。

比如:
    本类方法调用本类属性

    本类方法调用另一个本类方法

    子类构造方法隐含调用 super()

三、类创建的过程

任何类在创建之初,都有一个默认的无参构造方法,它是 super() 的一条默认通路。构造方法的参数列表决定了调用通路的选择;
如果子类指定调用父类的某个构造方法,super 就会不断的向上溯源(每个对象必然是继承一个父类,
这块地意思就是沿着一层一层的路径找到 Object 类);如果没有指定,则调用 super() 。
如果父类没有提供默认的构造方法,子类在继承时就会编译错误。

class Father{
    public Father(int a){
    }
}

//这块就会报错,因为子类没有明确的指定继承父类的某个构造方法,而且父类也没有默认的无参构造方法
class Son1 extends Father{
}

//正确的方式
class Son2 extends Father{
     public Son2{
           super(1);
     }
}
如果父类坚持不提供无参的构造方法,就必须如上代码的Son2类的无参构造方法中使用 super 方式调用父类的某个有参构造方法。

2.1 this 的作用

一个实例变量可以通过 this. 赋值另一个实例变量;一个实例方法可以通过 this. 调用另一个实例方法;
甚至一个构造方法也可以通过 this. 调用另一个构造方法。

2.2 super的作用

1、普通的直接引用

与this类似,super相当于是指向当前对象的父类,这样就可以用http://super.xxx来引用父类的成员。

2、子类中的成员变量或方法与父类中的成员变量或方法同名。

3、引用构造函数

super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)。

this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句)。

2.3 this 和 super 使用注意

(1) 如果 this 和 super 指代构造方法,则必须位于方法体的第一行。换句话说,在一个构造方法中,
    this 和 super 只能出现一个,且只能出现一次,否则在实例化对象时,会因为子类调用多个构造方法而造成混乱。
    

(2) 由于 this 和 super 都在实例化阶段调用,所以不能在静态方法和静态代码块中使用 this 和 super 关键字。
    

(3) this 还可以值代当前对象,比如在同步代码块 synchronized(this){....}中,
    super 就不具备这种能力。但是 super 也有自己独特的功能,在子类覆盖父类方法的时候,可以使用 super 调用父类的同名方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值