• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Jay_zhen
博客园    首页    新随笔    联系   管理    订阅  订阅
super 关键字
  • super调用属性或方法:
  1. 在子类中使用"super.属性"或"super.方法"的方式,显式的调用父类中声明的属性或方法。但通常情况下,我们习惯省略"super."
  2. super的追溯不仅限于直接父类的内存空间标识,调用特有方法可以不用+this()或者super(),会自动向上追溯,仅当直接父类和间接父类(Object)都有相同特有方法,优先调用直接父类
  • super调用构造器:
  1. 在子类的构造器中默认使用"super(形参列表)"的方式,调用父类中声明的指定的构造器
  2. "super(形参列表)"必须声明在子类构造器的首行!没有显式的声明则默认调用的是父类中空参的构造器:super()
  3. 在子类的多个构造器中,至少有一个类的构造器中使用了"super(形参列表)"调用父类中的构造器
  4. "this(形参列表)"或"super(形参列表)"只能二选一
点击查看**父类Person**代码
public class Person {
    String name;
    int age;
    int id = 610;//身份证号

    public Person(){
        System.out.println("Person()——super()无处不在!");
    }

    public Person(String name){
        this.name = name;
    }

    public Person(String name,int age){
        this(name);
        this.age = age;
    }

    public void sleep(){
        System.out.println("人都缺觉");
    }

}
点击查看**子类Student**代码
public class Student extends Person {
    String major;
    int id = 20722028; //学号

    public Student(){
        //super(); 默认省略
    }
    public Student(String major){
        //super(); 默认省略
        this.major = major;
    }

    public Student(String name,int age,String major){
        super(name,age); //调用public Person(String name,int age)
        this.major = major;
    }

    @Override
    public void sleep() {
        super.sleep(); //追溯
        System.out.println("所以学生多睡觉长得高");
    }

    public void study(){
        System.out.println("学生 为中华民族伟大复兴而读书");
    }

    public void show(){
        System.out.println("name = " + name + ", age = " + age);
        System.out.println("身份id = " + super.id);
        System.out.println("学号id = " + this.id);
        
    }
}
测试运行:
public class StudentSuperTest {
    public static void main(String[] args) {
        System.out.println("************");
        Student s = new Student();
        s.show(); //name = NULL,age = 0;
        s.sleep();
        System.out.println();

        System.out.println("************");
        Student s1 = new Student("Liuzhen", 23, "Math");
        s1.show();
        System.out.println();

        System.out.println("************");
        Student s2 = new Student(); //Person()——super()无处不在!
    }
}

RunResult:

posted on 2021-12-29 09:36  Jay_zhen  阅读(42)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3