文章目录
- 基本概念
- 继承的语法
- 继承性的细节
- 方法的重写
- 方法重写的要求
基本概念
继承性允许子类继承父类的属性和方法。在Java中,使用关键字extends来实现继承。例如:
class Animal {
void eat() {
System.out.println("动物正在吃");
}
}
class Dog extends Animal {
void bark() {
System.out.println("狗在叫");
}
}
Dog类继承了Animal类,这意味着 Dog 类拥有了Animal类的 eat 方法。通过继承,我们可以建立类层次结构,使代码更加组织有序。
继承的语法
B是子类,A是父类。子类可以访问父类的非私有成员,包括属性和方法。通过继承,子类还可以覆盖(override)父类的方法,以提供特定于子类的实现。
[修饰符] class 类 A {
...
}
[修饰符] class 类 B extends 类 A {
...
}
继承性的细节
- 子类会继承父类所有的实例变量和实例方法
父类是所有子类共同特征的抽象描述。而实例变量和实例方法就是事物的特征,那么父类中声明的实例变量和实例方法代表子类事物也有这个特征。
- 当子类对象被创建时,在堆中给对象申请内存时,就要看子类和父类都声明了什么实例变量,这些实例变量都要分配内存。
- 当子类对象调用方法时,编译器会先在子类模板中看该类是否有这个方法,如果没找到,会看它的父类甚至父类的父类是否声明了这个方法,遵循从下往上找的顺序,找到了就停止,一直到根父类都没有找到,就会报编译错误。
- 子类不能直接访问父类中私有的(private)的成员变量和方法
子类虽会继承父类私有(private)的成员变量,但子类不能对继承的私有成员变量直接进行访问,可通过继承的 get/set 方法进行访问。 - 在 Java 中,继承的关键字用的是“extends”,即子类不是父类的子集,而是对父类的“扩展”
- 一个父类可以同时拥有多个子类
- Java 只支持单继承,不支持多重继承
方法的重写
子类可以对从父类中继承来的方法进行改造,称为方法的重写 (override、overwrite)。也称为方法的重置、覆盖。
class Animal {
void makeSound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("狗在汪汪叫");
}
}
方法重写的要求
- 子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表。
- 子类重写的方法的返回值类型不能大于父类被重写的方法的返回值类型。(例如:Student < Person)。
注意:如果返回值类型是基本数据类型和 void,那么必须是相同 - 子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限。(public > protected > 缺省 > private)
注意:① 父类私有方法不能重写 ② 跨包的父类缺省的方法也不能重写 - 子类方法抛出的异常不能大于父类被重写方法的异常
- 子类与父类中同名同参数的方法必须同时声明为非static的(即为重写),或者同时声明为static的(不是重写)。因为static方法是属于类的,子类无法覆盖父类的方法。