💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## Java专题零:类的继承 [TOC] ### 0.1. final不能继承 - 使用`final`修饰的类不能被继承 - 使用`final`修饰的方法不能被重写 ### 0.2. 重写方法的访问修饰符 > 子类的重写方法修饰符必须比大于或等于父类的方法 方法的访问修饰符: - `public`:公开的,所有类都可以访问 - `protected`:保护的,本类和子类才可以访问 - `package-default`:包私有的,本类和相同包的类才可以访问 - `private`:私有的,本类才可以访问 访问权限大小: `public` > `protected` > ` package-default `> `private` 如: FatherClass类中`packageMethod`方法访问修饰符是`package-default`,SonClass类中重写的`packageMethod`方法访问修饰符必须大于或等于`package-default`,可以是`public`、`protected`、` package-default `,但不可以是`private`,否则编译时会报语法错误 ~~~ public class FatherClass { void packageMethod(){ } } ~~~ ~~~ public class SonClass extends FatherClass{ public void packageMethod(){ } } ~~~ ### 0.3. 重写方法的异常抛出 > 子类的重写方法抛出的异常是父类抛出的异常或异常的子类 如: FatherClass类中`exceptionMethod`方法抛出的异常是`FileNotFoundException`,SonClass类中重写的`packageMethod`方法抛出的异常只能是`FileNotFoundException`或`FileNotFoundException`的子类,下面的`IOException`,编译时会报被重写的父类方法没有抛出`IOException` ~~~ public class FatherClass { public void exceptionMethod() throws FileNotFoundException { } } ~~~ ~~~ public class SonClass extends FatherClass{ public void exceptionMethod() throws IOException { } } ~~~ ### 0.4. 子类对象创建的顺序 ***创建顺序如下***: 1. 父类静态成员(包括方法和变量,按顺序初始化) 2. 子类静态成员(包括方法和变量,按顺序初始化) 3. 父类成员变量(包括非静态代码块) 4. 父类构造方法 5. 子类成员变量(包括非静态代码块) 6. 子类构造方法 ***验证代码***: ```java // 主类,用来创建子类对象,验证我们的结果 public class Main { public static void main(String[] args) { new Son(); } } // 书类,用于测试对象成员变量 class Book{ public Book(String user){ System.out.println(user + "成员变量"); } } // 子类 class Son extends Fa{ static Book book= new Book("子类静态"); static{ System.out.println("子类静态代码块"); } Book sBook = new Book("子类"); { System.out.println("子类非静态代码块"); } public Son(){ System.out.println("子类构造方法"); } } // 父类 class Fa{ static Book book= new Book("父类静态"); static{ System.out.println("父类静态代码块"); } Book fBook = new Book("父类"); { System.out.println("父类非静态代码块"); } public Fa(){ System.out.println("父类构造方法"); } } ``` ***输出结果***: > 父类静态成员变量 父类静态代码块 子类静态成员变量 子类静态代码块 父类成员变量 父类非静态代码块 父类构造方法 子类成员变量 子类非静态代码块 子类构造方法