# 继承

  • 继承(Inheritance)是面向对象的重要基础,也是Java三大特性之一
  • 继承允许子类继承父类的属性和方法,提高了代码的复用性(reuse)
  • 继承具有向上转型的特点,子类与父类具有is-a关系,Person p = new Student()

# 特性

  • 子类继承父类全部内容,但是部分属于显式继承,部分隐式继承
    -> 「继承」父类非private的属性、方法
  • 子类可以对父类进行拓展,增加新的属性方法,或方法重写,属性覆盖
  • Java不支持多继承(子类同时继承多个父类),但支持多层继承

# 子类的构造

  • 默认先调用父类的__无参__构造进行初始化(默认首行添加super()),再向子类层级完成构造
  • 若父类没有无参构造方法,应在__第一行__使用super(args)来显式指定调用父类的构造器

# 关键字private和protected

  • 子类继承父类非private的属性和方法,但是父类的private属性和方法实际上仍然存在
  • 子类可以通过super.显式访问父类非private属性或调用非private方法
  • 子类可以拥有父类同名的private方法,但是此时不属于Override
  • 可以使用protected让字段或变量对类和子类可见,对类的用户而言相当于private

# 重写与重载

  • Override重写,子类对父类允许访问方法的重新实现
    • 形参列表: 必须不变
    • 返回类型: 可以不同,但是必须是父类返回值的派生类(Java7及更高版本)
    • 访问权限: 可以改变,但是不能比父类权限更低
    • 异常: 可以抛出任何非强制异常,但不能抛出新的或更广的强制异常
    • 声明为final的方法不能被重写
    • 声明为static的方法不能被重写,但是能够再次声明 (why (opens new window))
    • 可以使用super.method()调用父类被重写的方法
  • Overload重载,属于类的多态性的一个体现
    • 形参列表: 必须改变(类型,个数)
    • 返回类型: 可以不同
    • 访问权限: 可以改变
    • 异常: 可以声明新的或更广的检查异常
class Person{
    private String name;

    public Person(String nameIn) {
        this.name = nameIn;
    }

    public String getName() {
        return this.name;
    }

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

    public void printInfo() {
        System.out.println("Name: " + this.name);
    }

    public Person getOne() {
        return new Person("rchen102");
    }
}

class Student extends Person {
    private String school;

    public Student(String nameIn, String schoolIn) {
        super(nameIn);
        this.school = schoolIn;
    }

    @Override
    public void printInfo() {
        super.printInfo(); // Call the overridden method of father
        System.out.println("School: " + this.school);
    }

    @Override // Though return type is different, still work
    public Student getOne() {
        return new Student("rchen102", "BU");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

# 参考

[1] Java菜鸟教程 (opens new window)

[2] java提高篇(二)——理解java的三大特性之继承 (opens new window)

[3] Java的private成员变量的继承问题 (opens new window)

Last Updated: 7/1/2020, 2:19:02 AM