目录
Java中super详解
super的作用:
1. 通过super可以访问父类的构造方法
2. 通过super可以访问父类的属性(非私有)
3. 通过super可以访问父类的方法(非私有的方法)
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;}@Overridepublic 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);}@Overridepublic int hashCode() {return Objects.hash(age, name);}@Overridepublic 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对象的姓名属性
输出结果