目录
Java中super详解
在说super之前先说一下Java中的继承,继承是Java中面向对象编程技术的重要基石,因为它允许创建分等级层次的类。继承就是子类继承父类的行为和特征,就是方法和属性。私有的属性和方法子类是能继承的,但是子类无法直接调用,调用父类的私有属性需要在父类中声明get和set方法,这里final类型的父类成员私有变量也能被子类继承,而父类中的私有方法,子类虽然继承了,但是并不能够使用。
继承的限制: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方法
}
}
输出结果
2. 通过super可以访问父类的属性(非私有)
我们在父类属性中添加一个public属性
在子类方法中通过super操作Person父类中sex属性
这时父类中的sex属性已经被修改,可以通过print验证。
3. 通过super可以访问父类的方法(非私有的方法)
利于super调用Person父类中的setName()方法修改Teacher对象的姓名属性
输出结果