子类与继承
1、子类与父类
由继承得到的类称为子类,被继承的类称为父类(超类, superclass)。当我们编写一个类的时候,发现某个类已经有我们所需的部分成员变量和方法,我们可以将新编写的类继承为这个类的子类。子类继承了父类的部分变量和方法,也可以自己创建新的变量和方法。
Java不支持多重继承,一个子类只能有一个父类,而一个父类可以有多个子类。
子类的声明
在类的声明中,通过使用关键字extends
来定义一个类的子类:
/* 格式 */
class 子类名 extends 父类名 {
...
}
/* 举例 */
class Fruit {
// 父类
...
}
class Apple extends Fruit {
// 子类,使用 extends 关键字继承父类的变量与方法
...
}
instanceof运算符
instanceof运算符是Java独有的运算符,其左边的操作元是对象,右边的操作员是类。当左边的对象属于右边的类或其子类创建的对象,该运算结果为true
,否则结果为false
。
Fruit fruit = new Fruit();
Apple apple = new Apple();
System.out.println(fruit instanceof Apple); // 输出 false
System.out.println(apple instanceof Apple); // 输出 true
System.out.println(apple instanceof Fruit); // 输出 true
Object类与类的树形结构
在Java中,所有的类都有一个相同的源头: Object类,所有的类都间接或直接的继承于 Object类,若某个类在定义的时候没有使用extends
关键字,这个类将被默认为 Object 的子类。由于一个子类只能有一个父类,而一个父类可以有多个子类;所有的类共同形成一个树形结构,而 Object 类就是这棵树的根节点。
2、子类的继承性
所谓子类继承了父类中的变量和方法,就像在子类中直接定义了这些继承的变量和方法,可以被子类中自己定义的任何实例方法调用。
子类和父类在同一个包中
如果子类和父类在同一个包中,子类将继承父类中非私有(private)的变量和方法,继承的变量和方法的访问权限保持不变。
子类和父类不在同一个包中
当子类和父类不在同一个包中,仅受保护的(protected)和公有的(public)方法和变量被继承 。
访问权限
在Java中存在三种访问限制修饰符:private、protected、public,对应四种级别的访问权限,下表列举了被每种修饰符修饰的方法和变量能在什么条件下被访问:
修饰符 | 级别 | 类自身的方法 | 相同包中的类 | 非相同包中的类 |
---|---|---|---|---|
private | 私有 | √ | × | × |