1、abstract
似是而非,像又却不是,具备某种对象的特征,但不完整
一般来说父类都需要添加abstract
抽象类
public / 默认修饰符 abstract class 类名
被abstract修饰的类称为抽象类,抽象类的意思就是说不是完整的类,不够具体的类,抽象类是不能够具独立存在的,既不能new对象
抽象类的作用
可被子类继承,提供共性属性和放法
可声明为引用,更自然的使用多态
禁止实例化
约束子类行为
经验:抽象的父类可作为子类的组成部分,依附于子类对象存在
由父类共性 + 子类独有组成完整的子类对象
抽象方法
public abstract void / 数据类型 方法名();
被abstract修改的方法成为抽象方法,只有方法声明,没有方法实现{},意为不完整的方法,必须包含在抽象类中
abstract 修饰的方法直接分号结束
产生继承关系后,子类必须重写父类中所有的抽象方法,否则子类还是抽象类
抽象类可以没有抽象方法,但是有抽象方法的一定是抽象类
总结:
abstract修饰类:不能new对象,但可以声明引用
abstract修饰方法:只有方法声明,没有方法实现(需包含在抽象类中)
抽象类中不一定有抽象方法,但有抽象方法的类一定是抽象类
子类继承抽象类后,必须重写父类中所有的抽象方法,否则子类还是抽象类
abstract修饰的父类方法 用多态进行 父类类型 new子类对象 此时调用父类方法,因为abstract并且继承子类要重写 ,这样调用父类方法出现的也是子类对象
2、static
静态属性是整个类共同持有的共享空间(一份),任何对象修改,都会影响其他对象
静态的概念:可以修饰属性和方法
称为静态属性(类方法)、静态方法(类属性)
不必创建对象,可直接通过类名访问
特点
静态方法允许访问静态成员,不允许访问非静态成员
静态方法中不允许使用this或者super关键字
静态方法可以被继承,不能重写,没有多态
属性 -> 代码块 -> 构造方法
属性 -> 代码块 -> 方法里不写东西,因为是静态的
类加载时,触法静态代码块的执行并只会执行一次,无论类被new几次,静态代码块只执行一次
类里包含static成员,而且继承了父类,对象的创建过程
1、先父类的静态属性
2、父类的静态代码块
3、子类的静态属性
4、子类的静态代码块
5、父类的实例属性初始化
6、父类的动态代码块
7、父类的构造方法
8、子类的实例属性初始化
9、子类的动态代码块
10、子类的构造方法
第一次new一个对象时,按照1~10的顺序执行
第二次new一个对象,按照5~10的顺序执行
3、final
最终的不可被继承
修饰属性、局部变量,就称为常量,赋值后,不能动态通过代码改变其值
属性常量:在声明的同时必须赋值,否则报错
局部常量:先声明,再赋值
使用场景
程序里的固定信息,不允许的变量的,例如
提示信息 数据库名等
2、final修饰类,最终类,此类不能被继承,没有子类
3、final修饰方法,最终方法 不能被子类重写/覆盖