-
this和super关键字
this关键字
this的本质就是:创建好的对象的地址 -> 代表当前对象
构造方法是创建java对象的重要途经,通过new关键字调用构造器时,构造器返回该类对象,但是该对象并不完全由构造器创建。
创建对象分为四步:
- 分配对象空间,将对象成员变量初始化为0或null;
- 执行属性值显式初始化;
- 执行构造方法;
- 返回对象地址给相关变量
因为在调用构造方法前,对象已被创建,所以this可以在构造方法中充当当前对象
public construct(int id, String name){
this.id = id;
this.name = name;
}
举个例子,分析一下创建对象的过程
class Person {
int age;
String sex;
public Person(int age, String sex) {
this.age = age;
this.sex = sex;
}
}
public class Demo {
public static void main(String[] args) {
Person person = new Person(22 ,"boy");
}
}
this可以调用重载的构造方法
class Person {
int age;
String sex;
String name;
public Person(int age, String sex) {
this.age = age;
this.sex = sex;
}
public Person(int age,String sex,String name){
this(age,sex); //this()访问其他构造方法
this.name = name;
}
}
总结:
- this可以用于构造方法中代表当前对象;
- this也可以调用重载的构造方法,但是必须位于构造方法第一句;
- this不能用与static方法中
super关键字
-
访问父类的构造函数:可以使用 super() 函数访问父类的构造函数,从而委托父类完成一些初始化的工作。应该注意到,子类一定会调用父类的构造函数来完成初始化工作,默认调用父类的无参构造函数,如果子类需要调用父类其它构造函数,那么就可以使用 super() 函数,但是必须位于构造方法第一句。(所以在构造器中this和super不能共存,只能用一个)
-
访问父类的成员:如果子类重写了父类的某个方法,可以通过使用 super 关键字来引用父类的方法实现。
public class SuperDemo {
protected int x;
protected int y;
public SuperDemo(int x, int y) {
this.x = x;
this.y = y;
}
public void func() {
System.out.println("调用父类方法");
}
}
public class SuperExtend extends SuperDemo {
private int z;
public SuperExtend(int x, int y, int z) {
super(x, y); //super()访问父类构造方法
this.z = z;
}
@Override
public void func() {
super.func(); //super引用父类方法实现
System.out.println("调用子类方法");
}
}
运行结果:
调用父类方法
调用子类方法
两者区别
this | super | |
---|---|---|
访问属性 | 从本类属性开始访问,本类有并且可以访问则访问;没有从父类中查找,父类有并且可以访问则访问;如果父类没有则继续向上找直到Object类 | 直接从父类中开始查找,直到Object类 |
调用方法 | 调用本类方法,本类如果没有此方法或则不能访问,则从父类中调用,以此类推,直到Object类 | 直接调用父类方法,直到Object类 |
总而言之,this是先从本类开始查找属性/方法,super是直接从其父类开始查找属性/方法
出处:https://www.cnblogs.com/ivanchenyx/p/16891431.html
栏目列表
最新更新
一个超经典 WinForm 卡死问题的再反思
C# 计算不规则多边形的相交/包含等关系
.NET Core 引发的异常:“sqlsugar.sqlsugarexcep
快速创建软件安装包-ClickOnce
nuget打包静态资源的问题
要写文档了,emmm,先写个文档工具吧——
乘风破浪,遇见最佳跨平台跨终端框架
【Windows版本控制】上海道宁为您提供Vi
available 处理办法
Visual Studio自定义背景图片
三大常用数据库事务详解之三:事务运行
三大常用关系型数据库事务详解之二:基
三大关系型数据库事务详解之一:基本概
MongoDB常用命令(2)
MongoDB基本介绍与安装(1)
SQLServer触发器调用JavaWeb接口
SQL Server索引的原理深入解析
SqlServer2016模糊匹配的三种方式及效率问题
SQL中Truncate的用法
sqlserver 多表关联时在where语句中慎用tri
在vscode中使用R时,用快捷键来快捷键入卡
VB.NET中如何快速访问注册表
ASP.NET中图象处理过程详解
Vue(1)Vue安装与使用
JavaScript 语言入门
js将一段字符串的首字母转成大写
纯原生html编写的h5视频播放器
H5仿原生app短信验证码vue2.0组件附源码地
TypeScript(4)接口
TypeScript(3)基础类型