继承(构造方法的执行顺序——父类无参、子类无参、父类无参(因为执行子类的构造函数一次就要调用父类的构造)、子类有参)
1、成员变量的继承
(1)、子类可以直接引用父类中定义的变量(注意构造方法对变量的影响)
(2)、当子类与父类定义了一个同名变量时, 子类与父类的同名变量同时存在, 互不干扰(父类的变量在子类中隐藏了, 可以通过super关键字调用)
2、方法的继承
(1)、在子类中定义了一个同名、同类型、同参数的方法时, 父类的方法将会被覆盖(对子类对象而言不存在)
(2)、子类不能覆盖父类中的 final 和 static 方法, 但可以在子类中声明同样的 final 或 static 方法将之隐藏
(3)、子类可以直接使用父类中的方法
3、super关键字
(1)、使用方法——子类要访问父类的有参构造方法, 必须在子类构造方法的第一句使用 super关键字 来调用它
访问父类的无参构造方法——super();
访问父类的有参构造方法——super(参数列表);
访问父类的成员变量——super.变量名称;
4、总结
(1)、子类无条件的继承父类的无参构造方法
(2)、如果子类没有定义构造方法、它将把父类的无参构造方法作为自己的构造方法(不包括父类的有参构造方法),
如果子类定义了构造方法、则执行顺序(没有super关键字)
父类的无参构造方法-->子类无参-->父类无参(对子类无参中的内容没有影响)-->子类有参
抽象类和接口
1、抽象类(abstract)——类的抽象, 对相似类的归纳和总结 (通过抽象类派生的子类来实现具体的功能)
(1)、不能基于抽象类创建对象
(2)、抽象类中可以包含普通 成员变量、 成员方法、 抽象方法
2、抽象方法——只有方法声明, 没有方法体 (通过带派生的子类中完成方法体)
3、接口(interface)——属于非常标准严格的抽象类
(1)、只能定义抽象方法
(2)、定义接口中只能包含 public、 static、 final 类型的常量, 而不能包含成员变量
(3)、类可以继承多个接口