abstract修饰符的作用
abstract修饰的类是抽象类,抽象类不能被实例化成对象,子类继承抽象类必须实现父类的抽象方法,否则自身也必须是抽象类
abstract修饰的方法为抽象方法,存在抽象方法的类一定为抽象类,抽象类不一定存在抽象方法,可以全部是具体方法,抽象方法不可以有方法体。抽象类中的抽象方法的修饰符只能为public或者protected,默认为public
注意事项
- abstract和final不能同时使用,abstract修饰的类和方法是需要别人继承的,final则是阻止继承和方法重写的,相互冲突
- abstract和private不能同时修改方法,private是阻止继承的,相互冲突
- abstract和static不能同时修改方法,static修饰的方法可以直接通过类名点方法名调用,在调用时,可能这个方法没有具体实现 冲突
抽象类与接口的异同点
相同点
- 都不能被实例化
- 接口实现类或抽象类的子类必须实现接口或抽象类中的方法后才可实例化
不同点
- 接口只能定义不能有方法实现。JDK1.8开始可以定义default方法体,实现类可不实现该方法,可利用此特性 实现 模板方法模式
- 实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实现多个接口,但只能继承一个父类。使用接口可以间接的实现多重继承
- 接口强调特定功能的实现,抽象类强调所属关系
- 接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方法都是public abstract default方法除外。抽象类成员变量默认为default,可在子类中被重新定义,也可以重新赋值
static修饰符的作用
- static 可以修饰成员变量、常量、成员方法、成员内部类、代码块
- static修饰的成员都是属于类的,是所有类对象共享的
- static修饰的成员都可以通过类名直接调用
- static修饰的成员可以被继承,但是不能被重写(覆盖)
- static修饰的代码块会在类加载的时候执行一次,一般用于做初始化工作(普通代码实例化时都会被执行其只有实例化时才会被执行)

- static修饰的成员内部类可以在没有创建外部类对象的情况话直接创建内部类对象。及调用及成员内部内的静态方法
- static修饰的方法和代码块不能引用非static修饰的其他方法或者引用。因为static方法和代码块有可能对象尚未创建,而非static的引用必须有实例化对象的情况下才能被调用
评论区