super关键字

super 关键字

使用在子类中,代表父类对象的引用。 super 与 this 使用方式几乎一模一样

super.属性

super.方法

super(……) :调用父类的构造器

①当子类继承父类后,子类“所有”构造中默认第一行第一句有一个隐式的 super()

​ super() 作用: 调用父类的无参构造器

​ super() 目的:子类继承父类后,继承父类中所有的属性和方法,因此子类需要知道父类如何为对象进行初始化。(创建子类对象前,需要保证先初始化父类)

​ ②若父类中没有提供无参构造器,子类“所有”构造器中必须显示的调用父类的有参构造器。

​ ③super() 必须使用在构造器中可执行代码的首行

​ this() 必须使用在构造器中可执行代码的首行

​ (super() 与 this() 二者不能同时出现)

package com.java;

/*
子类继承父类后,类中各成员的特点
    属性
    方法
    构造器

1、构造器的特点
    ①当子类继承父类后,子类“所有”构造器中,第一行第一句有一个隐式的 super()
        super() 作用:调用父类的无参构造器
        super() 目的:当子类继承父类后,子类需要知道父类是如何为对象进行初始化的
    ②若父类中没有提供无参构造器,子类“所有”构造器中必须显示调用父类的有参构造器
    ③super() 必须写在当前构造器中可执行代码的首行
     this() 必须写在当前构造器中可执行代码的首行

     因此,super() 和 this() 二者不能同时出现
 */
public class ExtendsTest {

    public static void main(String[] args) {
        Student stu = new Student("学生张三", 18, 9527);
        System.out.println(stu.say());
    }

}

class Person{

    private String name;
    private int age;

    public Person(){

    }

    public Person(String name){
        this.name = "张三";
        System.out.println("Person's Constructor……");
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

class Student extends Person{

    private int stuId;

    public Student(){
        super("");//显示的使用 super(),则隐式的将不再提供
        System.out.println("Student's Constructor……");
    }

    public Student(String name, int age, int stuId){
        super(name, age);
        this.stuId = stuId;
    }

    public int getStuId() {
        return stuId;
    }

    public void setStuId(int stuId) {
        this.stuId = stuId;
    }

    public String say(){
        return getName() + "," + getAge() + "," + getStuId();
    }
}

你可能感兴趣的:(java,开发语言)