java super关键字的作用_Java中的this和super关键字全面解析

一、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 调用父类的同名方法。

四、 总结

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值