Java中super详解

目录

Java中super详解

super的作用:

1.     通过super可以访问父类的构造方法 

2.   通过super可以访问父类的属性(非私有)

3.        通过super可以访问父类的方法(非私有的方法)


Java中super详解

在说super之前先说一下Java中的继承,继承是Java中面向对象编程技术的重要基石,因为它允许创建分等级层次的类。继承就是子类继承父类的行为和特征,就是方法和属性。私有的属性和方法子类是能继承的,但是子类无法直接调用,调用父类的私有属性需要在父类中声明get和set方法,这里final类型的父类成员私有变量也能被子类继承,而父类中的私有方法,子类虽然继承了,但是并不能够使用。

继承的限制:Java中只有单继承,多重继承,没有多继承(一个子类有多个父类的情况不允许存在)

java权限修饰符
修饰符 子类 其他包
public
protected ×
default × ×
private × × ×

super的作用:

1.     通过super可以访问父类的构造方法 

调用父类构造方法的代码必须放在子类构造方法的第一行,不这样执行会报错(规定的格式),用super调用属性时不用遵守。

当父类没有无参构造方法时,不能直接使用super();调用父类构造方法

设置父类Person

package com.kkb.task010203.pojo;

import java.util.Objects;

public class Person {
    private int age;
    private String name;

    public Person() {
        System.out.println("父类无参构造方法被调用");//无参构造函数
    }

    public Person(int age, String name) {
    //有参构造函数
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

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

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(age, name);
    }

    @Override
    public String toString() {
        return "姓名"+this.name+",年龄"+this.age;
    }

    public void setName(String name) {
        this.name = name;
    }
    public void say(){
//父类中的say方法
        System.out.println("我叫"+name+"今年"+age+"岁了");
    }
}

子类Teacher

package com.kkb.task010203.pojo;

public class Teacher extends Person{
    public Teacher() {//子类的构造方法

            super(14,"李四");//调用父类中有参构造方法
        }
}

测试类

package com.kkb.task010203.pojo;

public class MainTest {
    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        teacher.say();//由于子类中没有重定义say方法,这里调用Person父类中的say方法
    }
}

输出结果

Java中super详解_第1张图片

2.   通过super可以访问父类的属性(非私有)

我们在父类属性中添加一个public属性 

Java中super详解_第2张图片

在子类方法中通过super操作Person父类中sex属性

Java中super详解_第3张图片

这时父类中的sex属性已经被修改,可以通过print验证。

3.        通过super可以访问父类的方法(非私有的方法)

利于super调用Person父类中的setName()方法修改Teacher对象的姓名属性

Java中super详解_第4张图片

 

输出结果

Java中super详解_第5张图片

 

你可能感兴趣的:(java)