目录
fanal关键字
-最终 不可变
场景
final修饰成员属性或变量-常量
final修饰方法-最终方法
final修饰类-最终类
常量
引用不可变得量
基本数据类型 --数据值不可变
引用数据类型 --地址值不可变 但是地址指向的元素值是可变的
格式
final 数据类型 常量名 = 初始化值;
常量名:
所有单词都大写 单词间通过_分割
注意
final修饰的成员属性 要么在定义时直接给出常量值 要么在构造代码块中给出常量值
final修饰方法
方法不能被重写
final修饰类
final 修饰类,则该类不能被继承
static+final 静态常量
格式
权限修饰符 static final 数据类型 常量名 = 常量值;
例: public static final int VALUE = 3;
特点:
类名直接调用静态常量
引用不可变
注意:
静态常量要么在定义时直接给常量值,要么在静态代码块中完成赋值
abstract-抽象类
abstract关键字
应用场景
修饰类--抽象类
修饰方法--抽象方法
引出
Animal 父类
call方法
Dog
重写call方法
Cat
重写call方法
父类中的call方法没必要 因为每个子类都会重写
可以将父类中call方法设置成抽象方法,Animal类设置为抽象类
抽象类
权限修饰符 abstract class 类名();
抽象方法
权限修饰符 abstract 返回值数据类型 方法名(参数列表);
注意
1*抽象方法不能有方法体
空的{}也不行
抽象方法后必须加分号表示方法定义结束
2*含有抽象方法的类必须是抽象类
抽象类中可以没有抽象方法
3*类中可以包含: 成员属性 成员方法 构造代码块 构造方法 抽象方法
4*抽象类的使用
1/ 子类继承抽象类,必须实现(重写)抽象类中的所有的抽象方法
2/ 子类继承抽象类,将子类也设置为抽象类 可以实现抽象
5*抽象类不能直接创建对象
6*抽象类支持向上造型
7*abstract关键字不能和private,static,final关键字一起使用修饰方法
abstract不能和final一起修饰类
意义
通过抽象方法来定义规则 要求继承抽象类的子类必须实现规则
案例:
教练/运动员
interface--接口
定义接口
权限修饰符 interface 接口名{}
interface 创建接口的关键字
接口名的命名方式参考类名
接口中可以定义的内容
公共的静态常量
在定义时可以省略public static final 关键字 底层会自动补充
抽象方法
在定义时可省略public abstract 底层自动补充
接口的使用
接口不能被创建对象
接口名.静态常量名--获取静态常量值
1*具体类实现接口,并实现接口中的所有抽象方法:
格式:
权限修饰符 class 类名 implements 接口名{}
implements 关键字 指定类实现的接口
2*抽象类实现接口,可以实现接口中的抽象方法,也可以不实现抽象方法
类可以继承父类的同时实现接口
格式:
权限修饰符 class 类名 extends 父类类名 implements 接口名1,接口2....{}
一个类可以实现多个接口
接口支持向上造型
将实现类的对象赋值给接口类型的引用
编译看左边,运行看右边
类与接口关系
类和类:
继承,--单继承
类和接口
实现--一个类可以实现多个接口
接口和接口
继承 -- 一个接口可以继承多个接口
接口的作用
约束
模板
抽象类和接口的区别
1*抽象类可以定义抽象方法以及其他内容
接口只能定义静态常量和抽象方法
2*一个类只能继承一个抽象类
一个类可以实现多个接口
3*抽象类--继承结构
接口---功能扩展
4*作用
抽象类--规定 必须实现某些功能
接口 -- 约束,模板
内部类