this、super 关键字
学习.net中我们使用过this关键字,但是
super:代表父类的存储空间标识(父类的引用)
this:代表当前对象的引用(谁调用就代表谁)
访问成员是谁? this.成员变量 本类的
super.成员变量 父类的
this.成员方法名() 本类的
super.成员方法名() 父类的
一、为什么使用this关键字?
this关键字 本类成员方法中,访问本类的成员变量
本类成员方法中,访问本类的另一成员方法
本类构造方法中,访问本类另一构造方法
当方法中的局部变量和和类的成员变量重名的时候,根据“就近原则”,优先使用局部变量。如果此时要访问本类当中的成员变量,则需要this.成员变量名。
demo类:sayHello()方法中有两个name ,根据就近原则,name为参数中的name, 结果:老王你好,我是老王
public class demo {
//局部变量name
String name;
//(String name 参数name为局部变量)
public void sayHello(String name) {
System.out.println(name + "你好,我是" + name);
}
}
修改后的demo类,此时如果访问成员变量name,则需要用关键字this去标识,结果:老王你好,我是程序猿
public class demo {
//局部变量name
String name;
//(String name 参数name为局部变量)
public void sayHello(String name) {
System.out.println(name + "你好,我是" + this.name);
}
}
main方法:main方法通过demo类调用的sayHello()方法,所以demo类就是this。(通过谁调用的方法,谁就是this)
public class demo1 {
public static void main(String[] args){
demo demo =new demo();
demo.name="程序猿";//为成员变量赋值
demo.sayHello("老王");//调用sayHello()方法,并传参“老王”
}
}
注意:本类构造方法中,访问本类另一构造方法
this() 调用必须是构造方法中的第一个语句,且是唯一的一个。
super和this关键字都必须在构造方法的第一行,所以不能同时出现。
二、为什么是用super关键字?
super关键字 子类成员方法中访问父类成员变量
子类成员方法中访问父类成员方法
在子类构造方法中,访问父类的构造方法。
父类
public class Father {
int x=10;//父类程成员变量x
//父类成员方法method()
public void method(){
System.out.println("父类的方法");
}
}
子类
public class Son extends Father {
int x =20;
public Son(){
super();//在子类构造方法中,访问父类的构造方法
}
public void method() {
System.out.println("子类的成员变量"+x);
System.out.println("父类的成员变量"+super.x);//子类成员方法中访问父类成员变量,结果为10
System.out.println("子类的方法");
super.method();//子类成员方法中访问父类成员方法,结果为”父类的方法“
}
}
main方法
三、this、super关键字图解
父类
public class Father {
int num=10;//父类程成员变量x
//父类成员方法method()
public void method(){
System.out.println("父类的方法");
}
}
子类
ublic class Son extends Father {
int num=20;
@Override
public void method() {
System.out.println("子类方法");
}
public void show(){
int num=30;
System.out.println(num);
System.out.println(this.num);
System.out.println(super.num);
}
}
main方法:main 方法创建子类对象的时候,先创建父类空间,在创建子类对象本身。
public class main {
public static void main(String[] args){
Son son=new Son();
son.show();
son.method();
}
}
图解:
---------------------
作者:冯佳兴
来源:CSDN
原文:https://blog.csdn.net/fjxcsdn/article/details/90142524
版权声明:本文为博主原创文章,转载请附上博文链接!

浙公网安备 33010602011771号