super基本用法
- super能出现在实例方法和构造方法中。
- super的语法是:“super.”、"super ()"super不能使用在静态方法中。
- super.大都分情况下是可以省略的。
- super()只能出现在构造方法第一行,通过当前的构造方法去调用"父类"中的构造方法
- super作用:创建子类对象的时候,先初始化父类型特征。
super和this的混合调用
public class Text {
public static void main(String[] args) {
C();
}
}
class A{
public A(){
//默认有super();
System.out.println("1");
}
}
class B extends A{
public B(){
//默认有super();
System.out.println("2");
}
public B(int age){
//默认有super();
System.out.println("3");
}
}
class C extends B{
public C(){
this(11);
System.out.println("4");
}
public C(int age){
this(11,2021);
System.out.println("5");
}
public C(int age,int time){
super(age);
System.out.println("6");
}
}
结果:
1
3
6
5
4
当一个构造方法第一行:
1.既没有this又没有super()的话,默认会有一个super ( );表示通过当前子类的构造方法调用父类的无参数构造方法。所以必须保证父类的无参数构造方法是存在的。
2. this()和super()不能共存,它们都是只能出现在构造方法第一行。3.无论是怎样,父类的构造方法是一定会执行的。
super初始化父类型特征
在调用子类属性时,调用父类的属性
public class Test {
public static void main(String[] args) {
Person p=new Person("小明");
p.see();
}
}
class Singer{
String name;
public Singer(){}
public Singer(String name){
this.name=name;
}
}
class Person extends Singer{
String name;
public Person(){}
public Person(String name){
super(name);//此处调用了父类中的name,并把值赋给name。表示当前对象的父类型对象
特征
public void see(){
System.out.println(this.name+"在唱歌");
System.out.println(super.name+"在唱歌");
System.out.println(name+"在唱歌");//默认为this.name
}
}
结果:
小明在唱歌
小明在唱歌
小明在唱歌
执行顺序:将"小明"赋给Person类中的有参构造方法,此构造方法把"小明"赋给父类的name
this.和super.区别
super不是引用。
super也不保存内存地址,super也不指向任何对象。
super只是代表当前对象内都的那一块父类型的特征。
- 输出this时,输出的是this.toString
public class Text{
public static void main(String[] args){
}
public void thing{
System.out.println(this);
//默认输出Object的this.toString
System.out.println(super);
//提示super后需要一个. 所以super不能单独输出
}
}
super访问方法
格式:super.方法名()
作用:调用父类中的方法
public class Test{
public static void main{
}
}
class Teacher{
public void speak(){
System.out.println("老师在讲课");
}
}
class Student extends Teacher{
public void speak(){
System.out.println("学生在讲话");
}
public vodi listen(){
this.speak();
super.speak();
System.out.println("学生在听课");
}
}
结果为:
学生在讲话
老师在讲课
学生在听课
super.属性名【访问父类的属性】
super.方法名(实参)【访问父类的方法】
super(实参)【调用父类的构造方法】