Java继承
2023/5/9大约 3 分钟
对象的初始化顺序
- 静态变量
- 静态初始化代码块
- 变量
- 初始化块
- 构造函数
单例模式
- 场景:在系统中,该类永远只有一个实例
- 控制外部对象的创建,在类内部提供一个方法,对外提供一个实例
package 面向对象.基础; public class test2 { public static void main(String[] args) { SingleTon a1=SingleTon.getSingleTon(); SingleTon a2=SingleTon.getSingleTon(); System.out.println(a1==a2);//返回结果为true } } class SingleTon{ private static SingleTon singleTon; private SingleTon(){}; public static SingleTon getSingleTon(){ if(singleTon==null){ singleTon=new SingleTon(); } return singleTon; } }
懒汉模式和饿汉模式
上面的代码块是懒汉模式的实现(什么时候需要我才去做实例化)
- 饿汉模式:先把对象准备好
class SingleTon2{ private static SingleTon2 singleTon=new SingleTon2(); private SingleTon2(){}; public static SingleTon2 getSingleTon(){ return singleTon; } }
继承
- 继承是单继承
- 支持多层继承
- 调用继承的方法遵循就近原则,先找父类再找爷爷类
访问控制权限
- 子类是否能够继承父类的私有成员变量和成员方法
- 不能直接继承和直接访问,可以通过父类的setter和getter访问
- 通过公有成员方法调用私有
成员变量和成员方法的访问
- 如果子类没有,直接使用的继承的父类中的成员变量和成员方法
- 如果子类有,使用的自己的成员变量和成员方法
- 子类与父类的属性和方法重名的时候,满足就近原则
- 当然如果要访问父类的可以使用super访问父类成员变量方法
方法重写
- 子类中出现和父类一模一样的方法时
- 继承关系
- 一模一样
- 方法重写的场景
- 子类需要父类的功能,但是父类满足不了子类的所有需求
- 重写方法:toString()
- 注意事项:子类重写的方法:参数,返回值,方法名一模一样,访问修饰符一定大于等于父类注解:@Override,注解写给JVM看,JVM编译的时候就会去验证重写的要求,私有方法不能重写。
位置 方法名 参数 返回值 修饰符 抛出异常 Overload 同一个类中 相同 不同 无关 无关 无关 Override 父类子类 相同 相同 小于等于 大于等于 小于等于
构造函数
子类会先优先执行父类的无参构造函数,如果父类没有无参构造函数则使用super去构造父类
类加载:常量池,静态池
父类静态:成员变量,初始化块
子类静态:成员变量,初始化块
运行期:new 对象
new 父类对象 :成员变量,初始化块,构造函数
new 子类对象:成员变量,初始化块,构造函数this和super
- this:当前对象引用
- super:父类对象引用
| 变量 | 方法 | 构造 | |
|---|---|---|---|
| this | this.成员变量 | this.成员方法() | this(参数) |
| super | super.成员变量 | super.成员方法() | super(参数) |
注意:this和super在构造函数的时候必须放在第一行且只能出现一个,子类的每个构造函数中,均有super(),调用父类的无参构造