this关键字的三种用法与super与this关键字图解
this关键字的三种用法
package day01.demo05; public class Fu { int num = 30; }
/* /* super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种: 1.在本类的成员方法中,访问本类的成员变量。 2.在本类的成员方法中,访向本类的另一个成员方法。 3。在本类的构造方法中,访同本类的另—个构造方法。在第三种用法当中婪注意: A. this ( ...)调用也必须是构造方法的第一个语句,唯——个。 B. super和this两种构造调用,不能同时使用。 */ public class Zi extends Fu { int num = 20; public Zi(){ // super();这一行不再赠送 this(123); // this(1,2)本来的无参构造,调用本类的有参构造 错误写法 } public Zi(int n){ } public Zi(int n,int m){ } public void showNum(){ int num = 10; System.out.println(num); System.out.println(this.num); System.out.println(super.num); } public void methodA(){ System.out.println("AAA"); } public void methodB(){ methodA(); System.out.println("BBB"); } }
super与this关键字图解
父类空间优先于子类对象产生
在每次创建子类对象时,先初始化父类空间,再创建其子类对象本身。目的在于子类对象中包含了其对应的父类空
间,便可以包含其父类的成员,如果父类成员非private修饰,则子类可以随意使用父类成员。代码体现在子类的构
造方法调用时,一定先调用父类的构造方法。理解图解如下:
super和this的含义
super :代表父类的存储空间标识(可以理解为父亲的引用)。
this :代表当前对象的引用(谁调用就代表谁)。
super和this的用法
1. 访问成员
this.成员变量 ‐‐ 本类的 super.成员变量 ‐‐ 父类的 this.成员方法名() ‐‐ 本类的 super.成员方法名() ‐‐ 父类的
用法演示,代码如下:
package day01.demo07; public class Animal { public void eat() { System.out.println("animal : eat"); } }
package day01.demo07; public class Cat extends Animal { public void eat() { System.out.println("cat : eat"); } public void eatTest() { this.eat(); // this 调用本类的方法 super.eat(); // super 调用父类的方法 } }
package day01.demo07; public class ExtendsDemo08 { public static void main(String[] args) { Animal a = new Animal(); a.eat(); Cat c = new Cat(); c.eatTest(); } }
2. 访问构造方法
this(...) ‐‐ 本类的构造方法 super(...) ‐‐ 父类的构造方法
子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。
super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。
/*super关键字用来访问父类内容,而this关键字用来访问本类内容。用法也有三种:1.在本类的成员方法中,访问本类的成员变量。2.在本类的成员方法中,访向本类的另一个成员方法。3。在本类的构造方法中,访同本类的另—个构造方法。在第三种用法当中婪注意:A. this ( ...)调用也必须是构造方法的第一个语句,唯——个。B. super和this两种构造调用,不能同时使用。*/