super(JAVA基础)
云基奔 • 2024-03-16 10:24:58 • 次
super指代的是父类对象,this指代的是当前对象。
构造方法中:
对于super关键字,如果父类的构造方法需要参数,则子类的构造方法中必须通过super(参数名)显式调用父类中的某一个构造方法;
代码:
//父类public class Father { public Father(int a) { } }//子类public class Child extends Father{ public Child() { //因为父类中只有一个有参构造,所以子类的构造方法中必须通过super调用 super(2); } }
对于this关键字,当一个类存在多个构造方法时,为了方便,会通过this(参数名)调用本类中的其他构造方法,与方法重载效果一致。
代码:
public class Father { //单参数构造 public Father(int a) { //通过this关键调用下方双参数的构造,这样可以避免构造方法中代码的重复编写 this(a, a); } //双参数构造 public Father(int a, int b) { }}
方法、代码块中:
对于super关键字,通过super.父类方法名(参数) 调用父类方法,如果子类中不存在与父类同名的方法,直接使用父类方法名(参数) 调用也可以;
对于this关键字,通过this.方法名(参数) 调用当前类方法,如果当前类中存在与父类同名的方法,直接使用方法名(参数) 调用默认使用当前类中方法。
代码:
//父类public class Father { public void getA() { } }//子类public class Child extends Father{ public void getA() { } public void getB(){ //调用父类方法 super.getA(); //调用子类方法 getA(); this.getA(); } }
调用变量时:
对于super关键字,通过super.变量名称 调用父类变量,如果子类中不存在与父类变量同名的变量,直接使用变量名 调用也可以;
对于super关键字,通过this.变量名称 调用当前类的成员变量,如果子类中不存在与父类变量同名的变量,直接使用变量名 调用也可以,同时this关键字只能用于调用成员变量,所以当一个方法中存在同名的成员变量和局部变量时,使用this区分,局部变量优先级 > 成员变量 > 父类变量。
//父类public class Father { int a = 5;}//子类public class Child extends Father{ int a = 6; public void getB(int a){ //调用父类变量 System.out.print(super.a); //调用当前类成员变量 System.out.print(this.a); //调用局部变量,默认调用的就是局部变量 System.out.print(a); } }
相关推荐
发表评论
