继承
2025年3月16日大约 3 分钟
继承
提高代码的重用性,减少代码
什么是继承
继承是面向对象编程的一种特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。
通过 extends 关键字实现继承
子类可以继承父类的所有非私有属性和方法,并且可以添加自己的属性和方法。
如何继承
访问修饰符 class 子类 extends 父类
// 父类
public class Human{
private String name;
private int age;
public String getName(){
System.out.println(name)
return name;
}
public void setName(String name){
this.name = name;
}
...
}
// 子类
public class Student extends Human{
private String school;
public String getSchool(){
System.out.println(school);
return school;
}
public void setSchool(String school){
this.school = school;
}
...
}
继承的特点
- 单继承:一个类只能继承一个父类
- 多层继承:继承关系具有传递性,一个子类的夫类可以继承另一个夫类
- 祖宗类: 所有类的父类都是Object类
- 就近原则: 当子类和父类具有相同属性或方法时,优先使用子类的
(这里只是写代码的时候遵循这个特点,但是调用时会有不同,具体在 多态-注意事项 中会进行介绍)
注:
- 当子类和父类具有相同属性或方法,想要使用父类的方法
可以使用super关键字调用父类的方法或属性
super.方法名() 或 super.属性名
方法重写
当父类方法无法满足子类需求时,可以对方法进行重写
重写方法需要和父类方法具有相同的名称、参数列表和返回值类型
如何进行方法重写
方法名称、参数列表和返回值类型和父类方法一样即是方法重写
使用@Override注解
@Override 方法重写的校验注解
- 注:虽然可以不加Override注解也是重写,但不建议这么做
// 父类
public class Order{
pubilc void pay(){
System.out.println("父类支付方法");
}
}
// 子类
public class Store extends Order{
@Override
public void pay(){
System.out.println("子类支付方法");
}
}
重写方法的注意事项
- 重写方法不能小于父类方法的访问权限
- 重写方法返回值类型,必须和父类方法的返回值一样,或者更小的访问
- 私有方法、静态方法不能被重写
构造器(子类)
子类构造器是如何调用父类构造器的
关键词 super
- 子类构造器默认会写出 super(),调用父类构造器,再执行自身的构造器
- 如果父类没有无参构造器,子类必须手动调用父类有参构造器
// 父类
public class Human{
public Human(String name, int age){
this.name = name;
this.age = age;
}
}
// 子类
public class Chinese{
public Chinese(String name, int age){
super(name, age);
}
}
子类调用兄弟构造器
关键字 this
兄弟构造器:在同一个类中的其他构造器
注:this() 和 super() 必须放在构造器第一行,且不能同时出现
// 子类
public class Chinese{
private String name;
private int age;
private String nation;
public Chinese(String name, int age){
this(name,age,"中国");
}
public Chinese(String name, int age , String nation){
this.name = name;
this.age = age;
this.nation = nation;
}