第二章.继承

使用继承的好处:

  1. 减少代码量
    1. 提高程序的可扩展性和可维护性

继承关键字:子类 extends 父类 单继承


子类不能继承父类的哪些:

  1. 私有资源
  2. 当子类和父类不在同一个包下,父类中使用默认访问权限修饰的资源
  3. 构造方法(构造方法不能被重写,因为不能被继承)

构造方法子类继承不到,但可以调用,使用super关键字调用,调用构造方法的代码必须放到第一行


关于访问修饰符的访问权限:

本类 同包 子类 其他
private
默认的
protected
public

继承关系下对象的初始化顺序:

父类属性 > 父类构造 > 子类属性 > 子类构造

如果没有显式调用父类构造,则系统默认调用父类无参构造


方法重写重载:

位置 访问修饰符 返回值类型 方法名 参数列表
重载 同类 无关 无关 相同 不同(数量,顺序,类型)
重写 子类 不能严于父类 相同或是其子类 相同 相同

抽象类和抽象方法:

  • 抽象类
    1. 不能被实例化
    2. 可以有普通方法,可以没有,也可以有一个或者多个抽象方法
  • 抽象方法
    1. 只有方法声明,没有方法实现(方法体)
    2. 只能放到抽象类中
    3. 子类必须重写父类中所有的抽象方法,除非子类也是抽象类

final 关键字:

  1. 属性:常量(一经声明赋值后,值不可更改)
  2. 方法:最终的方法(不能被重写)
  3. 类:最终的类(无法被继承)

方法重写

  1. 不在同一个类中,在具有继承关系的子类下
    1. 方法名相同
    2. 方法的参数列表必须相同(参数的个数,顺序,类型)
    3. 与返回值类型无关
    4. 访问修饰符不能严于父类

抽象类:abstract

  1. 作用:限制实例化(不让抽象类进行创建对象),一般将父类设置为抽象类

  2. 抽象类中既有抽象方法,也可以有普通方法(实例方法)

  3. 抽象方法:public abstract void show();

  4. 只有方法声明,没有方法实现,没有方法体

  5. 子类继承抽象类,必须重写父类的抽象方法

  6. 抽象方法必须在子类中被实现,除非子类是抽象类

    1
    public abstract class Student{}//定义抽象类的语法