this和super关键字的作用如何(this和super关键字)
导读:this关键字 this的本质就是:...
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是直接从其父类开始查找属性/方法
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!