继承
继承的核心作用是:让子类复用父类的属性和方法,并可以扩展或修改行为。
基本语法
在 Java 中使用 extends 关键字实现继承。
JAVA
class Animal {
String name;
void eat() {
System.out.println("动物在吃东西");
}
}
class Dog extends Animal {
void bark() {
System.out.println("狗在叫");
}
}- Java 只支持单继承
- 除私有、构造方法不支持继承,其他的全部会被子类继承
- 一个类没有显式继承任何类时,默认继承Object类
方法重写(Override)
当从父类中继承过来的方法无法满足子类的业务需求时,子类可以 重写父类方法。
规则:
- 方法名相同
- 形参列表相同
- 返回值相同或兼容【向上转型】
- 访问权限不能更严格
java
class Animal {
void sound() {
System.out.println("动物发出声音");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("狗在叫");
}
}@Override注解用来标注方法,被标注的方法必须是重写父类的方法,如果不是重写的方法,编译器会报错。@Override注解只在编译阶段有用,和运行期无关
重写方法访问权限不能变低,可以变高。
抛出的异常不能变多,可以变少
方法覆盖针对的是实例方法,和静态方法无关。子类可以有同名静态方法。
java
class Parent {
static void test() {
System.out.println("Parent static method");
}
}
class Child extends Parent {
static void test() {
System.out.println("Child static method");
}
}java
public class Main {
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child();
p.test();
c.test();
}
}java
Parent static method
Child static method继承的初始化顺序
创建子类对象时:
- 父类静态代码块
- 子类静态代码块
- 父类构造函数
- 子类构造函数
java
class A {
static {
System.out.println("A static");
}
A() {
System.out.println("A constructor");
}
}
class B extends A {
static {
System.out.println("B static");
}
B() {
System.out.println("B constructor");
}
}java
new B();java
A static
B static
A constructor
B constructor