super关键字

一:概念

  • Java中的super关键字是一个引用变量,用于引用父类对象。关键字“super”以继承的概念出现在类中。

  • super代表父类,而super()则代表父类的构造函数,可以使用super代替父类中的属性或方法。

  • 在定义构造函数时,应将调用父类构造函数的代码“super()”,置于调用父类构造函数的方法内部的最顶端,因为首先必须初始化继承自父类的成员。

二:主要作用

  • 调用父类的方法
  • 调用父类的属性(变量)
  • 调用父类的构造器

三:使用

  1. super.属性
public class T2_super {
    public static void main(String[] args) {
        Student s1 = new Student(); // 实例化类
        s1.t1_super(); // 调用子类方法
        s1.ShowName(); // 调用父类方法
    }
}

// 父类
class People {
    /*
     * 父类属性
     */
    String name;
    String sex;
    int age;

    /*
    * 父类方法
    */
    public void ShowName() {
        System.out.println("姓名:" + this.name);
    }
}

// 子类
class Student extends People {
    public void t1_super() 
    // 利用super调用父类属性
    {
        super.name = "张三"; // 访问父类属性 name 并赋值
    }

}
// 运行结果
姓名:张三
  1. super.方法
public class T2_super {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.t2_super();
    }
}

// 父类
class People {
    /*
     * 父类属性
     */
    String name;
    int age;
    String sex;
    
    /*
    * 父类方法
    */
    public void setName(String name) 
    {
        this.name = name; // 设置name属性
    }

    public void ShowName() 
    // 打印name属性
    {
        System.out.println("姓名:" + this.name);
    }
}

// 子类 
class Student extends People {
    public void t2_super() 
    // 调用父类方法
    {
        super.setName("李四"); //调用父类方法
        super.ShowName;  //父类打印name方法
    }
}
// 运行结果
姓名:李四
  1. super.构造器
  • 子类中所有的构造器默认都会访问父类中空参的构造器
  • 当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或superr(参数列表)语句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行
public class T2_super {
    public static void main(String[] args) {
        Student s1 = new Student("王二");
        s1.ShowName();
    }
}

// 父类
class People {
    /*
     * 父类属性
     */
    String name;
    int age;
    String sex;

    /*
    * 父类方法
    */
    public People(String name) 
    // 父类构造器
    {
        this.name = name;
    }

    public void ShowName() {
        System.out.println("姓名:" + this.name);
    }
}

// 子类 
class Student extends People {
    public Student(String name)
    //调用父类构造器
    {
        super(name); //构造器首行
    } 
}
// 运行结果
姓名:王二

四:注意

  • super的追溯不限于直接父类 (如:多层继承)

  • 尤其当子父类出现同名成员时,可以用super进行区分

  • super和this用法相似,this代表本类对象的引用,super代表父类的内存空间的标识

  • 在父类只有有参构造可以使用的时候,子类必须显示的构建一个构造来“继承”父类的有参构造,并且调用父类方法要写在第一行

  • 如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错

posted @   Gonfei  阅读(261)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示