一、三大修饰符
1. static 静态的
修饰属性、方法、初始代码块
1) 属性
语法: static 数据类型 属性名;
特点:被 static 修饰的属性称为 类属性 ;全类共享(与对象无关)
使用:类名.属性名;
2) 方法
语法: static 返回值类型 方法名 (参数列表)
使用:类名.方法名(实参)
特点:该方法被称为 静态方法 ;
1) static 方法可以被继承和覆盖,但只能被静态(static)方法覆盖,且没有多态。
2) 调用静态方法仅仅相当于对引用的数据类型调用静态方法,与对象无关。
3) static 方法中不能使用this和super
4) 在静态方法中只能直接调用静态成员,不能直接调用非静态成员(可以创建对象调用)
3) 初始代码块
初始代码块是在类以内、方法以外定义的代码块,用于初始化属性,按照定义的先后顺序依次
进行对象初始化的工作。
静态代码块: 用 static 修饰的初始代码块。用于在类加载时,和其他的 static
成员按照定义的先后顺序依次进行初始化工作。
4) 类加载『了解』
当JVM第一次使用这个类时,JVM会将这个类的信息保存在内存中,这个过程叫做类加载。
一般来说,一个类只加载一次。
2. final 最终
能修饰 变量(包括局部变量)、方法、类。
1) 变量
语法: final 数据类型 变量名
特点: 不变,一旦赋值,永不改变。又称为 常量。
只有一次赋值机会。
1) 基本类型 常量 值不变。
2) 引用类型/对象类型/复杂类型 常量 地址不变。
3) 被 final 修饰的属性没有默认值,通常在初始化属性时或在构造方法里赋值。
4) 如果在构造方法内赋值,则每一个构造方法都必须赋值。
2) 方法
语法: final 返回值类型 方法名(参数列表)
特点: final 修饰的方法为 最终方法,能被继承,不能被覆盖。
3) 类
语法: final class 类名
特点: 为最终类,不能被继承。(例如:String类)
3. abstract 抽象的
能修饰类、方法。
1) 方法
语法: abstract 返回值类型 方法名(参数列表);
特点: 抽象方法只有声明,没有实现。
2) 类
语法: abstract class 名称
特点: 1) 不能创建对象,可以声明引用
2) 子类继承抽象类必须实现该抽象类中所有的抽象方法,除非子类也是抽象类
3) 抽象类中能有非抽象方法。
3) 好处
强制多态。
更好的体现出“共性在父类”。
二、接口 interface
1. 相当于一个特殊的抽象类
相同点: 1) 不能创建对象,可以声明引用
2) 编译之后都会生成 .class 文件
不同点: 1) 接口没有构造方法,没有初始代码块,没有静态代码块
2) 接口中所有的方法都是抽象方法,且默认为 公开的
public abstract 返回值类型 方法名 (参数列表);
3) 接口中所有的属性都是 公开 静态 常量。
public static final 数据类型 常量名 ;
2. 语法
//定义一个接口
interface 接口名{}
//接口可以多继承
interface 接口名 extends 父接口名1,父接口名2{}
//类和接口可以多实现( implements )
class 类名 implements 接口名1,接口名2{}
//类和类的 单继承 以及 和接口之间的 多实现
class 类名 extends 父类名 implements 接口名1,接口名2{}
注意: 1) 类 实现 接口,必须实现接口中所有的抽象方法,除非它是抽象类。
2) 类 实现接口时 ,该类中的方法必须是 public