java中this与super

1、this的含义

this代表当前对象

2、this使用位置

  • this在实例初始化相关的代码块和构造器中:表示正在创建的那个实例对象,即正在new谁,this就代表谁
  • this在非静态实例方法中:表示调用该方法的对象,即谁在调用,this就代表谁。
  • this不能出现在静态代码块和静态方法中

3、this使用格式

(1)this.成员变量名

  • 当方法的局部变量与当前对象的成员变量重名时,就可以在成员变量前面加this.,如果没有重名问题,就可以省略this.
  • this.成员变量会先从本类声明的成员变量列表中查找,如果未找到,会去从父类继承的在子类中仍然可见的成员变量列表中查找

(2)this.成员方法

  • 调用当前对象的成员方法时,都可以加"this.",也可以省略,实际开发中都省略
  • 当前对象的成员方法,先从本类声明的成员方法列表中查找,如果未找到,会去从父类继承的在子类中仍然可见的成员方法列表中查找

(3)this()或this(实参列表)

  • 只能调用本类的其他构造器

  • 必须在构造器的首行

  • 如果一个类中声明了n个构造器,则最多有 n - 1个构造器中使用了"this(【实参列表】)",否则会发生递归调用死循环

6.7.2 super关键字

1、super的含义

super代表当前对象中从父类的引用的

2、super使用的前提

  • 通过super引用父类的xx,都是在子类中仍然可见的
  • 不能在静态代码块和静态方法中使用super

3、super的使用格式

(1)super.成员变量

在子类中访问父类的成员变量,特别是当子类的成员变量与父类的成员变量重名时。

public class Person {
     
	private String name;
	private int age;
	//其他代码省略
}
public class Student extends Person{
     
	private int score;
	//其他成员方法省略
}
public class Test{
     
    public static void main(String[] args){
     
    	Student stu = new Student();
    }
}

java中this与super_第1张图片

public class Test{
     
    public static void main(String[] args){
     
    	Son s = new Son();
    	s.test(30);
    }
}
class Father{
     
	int a = 10;
}
class Son extends Father{
     
	int a = 20;
	public void test(int a){
     
		System.out.println(super.a);//10
		System.out.println(this.a);//20
		System.out.println(a);//30
	}
}

(2)super.成员方法

在子类中调用父类的成员方法,特别是当子类重写了父类的成员方法时

public class Test{
     
    public static void main(String[] args){
     
    	Son s = new Son();
    	s.test();
    }
}
class Father{
     
	public void method(){
     
		System.out.println("aa");
	}
}
class Son extends Father{
     
	public void method(){
     
		System.out.println("bb");
	}
	public void test(){
     
		method();//bb
		this.method();//bb
		super.method();//aa
	}
}

(3)super()或super(实参列表)

在子类的构造器首行,用于表示调用父类的哪个实例初始化方法

super() 和 this() 都必须是在构造方法的第一行,所以不能同时出现。

1. 从上面的图片可以看出super不可以调用的属性,this可以调,super不可以调的方法,this可以调,先调后用,就是这么厉害,不要问为什么,问就是jdk特许,先调后用,super不能用,this可以是用。

你可能感兴趣的:(java)