## 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("父类构造方法");
}
}
```
***输出结果***:
> 父类静态成员变量
父类静态代码块
子类静态成员变量
子类静态代码块
父类成员变量
父类非静态代码块
父类构造方法
子类成员变量
子类非静态代码块
子类构造方法
- JavaCook
- Java专题零:类的继承
- Java专题一:数据类型
- Java专题二:相等与比较
- Java专题三:集合
- Java专题四:异常
- Java专题五:遍历与迭代
- Java专题六:运算符
- Java专题七:正则表达式
- Java专题八:泛型
- Java专题九:反射
- Java专题九(1):反射
- Java专题九(2):动态代理
- Java专题十:日期与时间
- Java专题十一:IO与NIO
- Java专题十一(1):IO
- Java专题十一(2):NIO
- Java专题十二:网络
- Java专题十三:并发编程
- Java专题十三(1):线程与线程池
- Java专题十三(2):线程安全与同步
- Java专题十三(3):内存模型、volatile、ThreadLocal
- Java专题十四:JDBC
- Java专题十五:日志
- Java专题十六:定时任务
- Java专题十七:JavaMail
- Java专题十八:注解
- Java专题十九:浅拷贝与深拷贝
- Java专题二十:设计模式
- Java专题二十一:序列化与反序列化
- 附加专题一:MySQL
- MySQL专题零:简介
- MySQL专题一:安装与连接
- MySQL专题二:DDL与DML语法
- MySQL专题三:工作原理
- MySQL专题四:InnoDB存储引擎
- MySQL专题五:sql优化
- MySQL专题六:数据类型
- 附加专题二:Mybatis
- Mybatis专题零:简介
- Mybatis专题一:配置文件
- Mybatis专题二:映射文件
- Mybatis专题三:动态SQL
- Mybatis专题四:源码解析
- 附加专题三:Web编程
- Web专题零:HTTP协议
- Web专题一:Servlet
- Web专题二:Cookie与Session
- 附加专题四:Redis
- Redis专题一:数据类型
- Redis专题二:事务
- Redis专题三:key的过期
- Redis专题四:消息队列
- Redis专题五:持久化