类初始化和示例初始化
类初始化过程
1、一个类要创建实例需要先加载并初始化该类
main方法所在的类需要先加载和初始化
2、一个子类要初始化需要先初始化父类
main方法所在的类需要先加载和初始化
2、一个子类要初始化需要先初始化父类
3、一个类初始化就是执行<clinit>()方法
<clinit>()方法由静态类变量显示赋值代码和静态代码块组成
<clinit>()方法由静态类变量显示赋值代码和静态代码块组成
类变量显示赋值代码和静态代码块代码从上到下顺序执行
<clinit>()方法只执行一次

实例初始化过程
1、实例初始化就是执行<init>()方法
<init>()方法可能重载有多个,有几个构造器就有几个<init>方法
<init>()方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成
<init>()方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成
非静态实例变量显示赋值代码和非静态代码块代码从上到下顺序执行,而对应构造器的代码最后执行
每次创建实例对象,调用对应构造器,执行的就是对应的<init>方法
<init>方法的首行是super()或super(实参列表),即对应父类的<init>方法
<init>方法的首行是super()或super(实参列表),即对应父类的<init>方法

方法的重写Override
1、哪些方法不可以被重写
final方法
静态方法
private等子类中不可见方法
final方法
静态方法
private等子类中不可见方法
2、对象的多态性
子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码
子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码
非静态方法默认的调用对象是this
his对象在构造器或者说<init>方法中就是正在创建
his对象在构造器或者说<init>方法中就是正在创建
Override重写的要求
- 方法名(相同)
- 形参列表(相同)
- 返回值类型(相同)
- 抛出的异常列表(重写方法不能抛出新的异常,或者超过了父类范围的异常,但是可以抛出更少、更有限的异常,或者不抛出异常)
- 修饰符(不能缩小访问权限)
Override重写与Overload重载的区别
| 区别点 | 重载方法 | 重写方法 |
|---|---|---|
| 参数列表 | 必须修改 | 一定不能修改 |
| 返回类型 | 可以修改 | 一定不能修改 |
| 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
| 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
- (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
- (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
- (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

浙公网安备 33010602011771号