super关键字(Java)

super关键字

一、super:类似于this(此对象的…),super可以理解为父类的…

二、super可以用来调用属性、方法、构造器

三、super的使用

1.可以在子类的方法或构造器中,通过“super.属性”或“super.方法”的方式显式的调用父类中声明的属性或方法。但是通常情况下省略“super.”
2.特殊情况,当子类和父类定义同名的属性时,要想在子类调用父类中声明的属性,则必须显式的使用“super.属性”的方式,表明调用的是父类中的属性。

class Person{int id;}
class Student extends Person{int id;}
则直接在子类的方法或构造器中写id代表的是子类的id;this.id也代表子类的id;super.id代表是父类的id
3.当子类重写父类中的方法后,想在子类的方法中调用父类中被重写的方法时,则必须显式的使用“super.属性”的方式,表明调用的是父类中被重写的方法。
总结:在子类中想调子类的结构,啥都不加或加“this.”;想调父类的结构,加“super.”

四、super调用构造器

1.可以在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中指定的构造器

public class Person {
	Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
}
public class Student extends Person{
	Student(String name, int age, String major){
		super(name, age);//调用父类构造器
		this.major = major;
	}
}

2.“super(形参列表)”需声明在子类构造器的首行。所以在构造器中只能在“this(形参列表)”和“super(形参列表)”二选一,不能同时出现
3.在构造器首行没有显式的声明“this(形参列表)”和“super(形参列表)”,则默认调用的是父类中空参的构造器:super()

public class Student extends Person{
	Student(String major){
		this.major = major;//没有“this(形参列表)”和“super(形参列表)”,则默认在这个构造器中有一个super();
	}
}

所以父类中一定要有空参构造器,否则创建子类的时候构造器会出错(出错提示:Implicit super constructor Person() is undefined. ),因为要调用spuer();
4.在类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)“。

你可能感兴趣的:(java,eclipse,学习,java-ee)