继承
定义
子类对父类进行扩展,从一般到特殊的关系,父类放共性,子类放特性
语法格式
在定义子类(sub class)的时候使用 extends
来表明自己继承于哪一个父类(super class)
class SubClass extends SuperClass { // 子类特有的字段和方法}
注意点
类只允许单继承,不允许多继承,可以多重继承
解释:即extends 后面只能放一个父类,但是父类又可以继承爷爷类
子类可以访问的父类成员
可以直接访问
public或protected修饰的成员
同包中缺省权限修饰符的成员(权限修饰符:public protected private这三种)
不可以直接访问
不同包中缺省访问权限修饰符的成员
private成员
super关键字
定义
代表当前对象的父类对象
作用
- 在子类的构造方法中调用父类的指定构造器
super(name, age);
(必须作为构造方法中的第一条语句) - 在子类中访问父类的被隐藏的实例变量或调用父类的被覆盖的实例方法
super.name
super.fly();
方法覆盖
原则(一同两小一大)
一同:实例方法签名必须相同
两小:
- 子类方法的返回值类型和父类方法的返回类型相同或者是其子类
- 子类方法声明抛出的异常类和父类方法声明抛出的异常类相同或者是其子类(运行时异常除外)
一大:子类方法的访问权限比父类方法访问权限更大或相等
组合
把旧类对象作为新类的成员变量组合进来,用以实现新类的功能
在类A中创建一个类B类型的对象,通过该对象调用类B的方法
组合表达的是“有(has-a)”的关系
// private ArrayUtil util = new ArrayUtil();
public class OldClass {
public void method() {
System.out.println("旧类中的功能");
}}
public class NewClass {
// 将旧类组合到新类,作为新类的一个组合成分
private OldClass obj = new OldClass();
// 重新定义自己的 method() 方法
public void method() {
// 直接复用 OldClass 提供的 method() 方法来实现自己的 method() 方法
obj.method();
}}
public class CompositeDemo {
public static void main(String[] args) {
NewClass n = new NewClass();
n.method(); }}