final关键字
final: 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值。
final class 类名 {
}
修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
修饰变量
- 局部变量——基本类型
基本类型的局部变量,被final修饰后,只能赋值一次,不能再更改。
-
局部变量——引用类型
引用类型的局部变量,被final修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成
员变量值的修改, -
成员变量
成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:
显示初始化;
构造方法初始化。
接口
接口的内部主要就是封装了方法,包含,自定义常量,抽象方法(JDK 7及以前),默认方法和静态方法
(JDK 8),私有方法(JDK 9)。
接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法
(JDK 8),私有方法(JDK 9)。
引用数据类型:数组,类,接口。
接口的使用,它不能创建对象,但是可以被实现( implements ,类似于被继承)。一个实现接口的类
(可以看做是接口的子类),需要实现接口中所有的抽象方法,创建该类对象,就可以调用方法了,否
则它必须是一个抽象类。
自定义常量
[public] [static] [final] 数据类型 常量名 = 初始化值;
抽象方法
[public] [abstract] 返回值类型 方法名();
默认方法
[public] default 返回值类型 方法名 () {}
静态方法
[public] static 返回值类型 方法名 () {}
私有方法(JDK9.0)
private 返回值类型 方法名 () {}
private static 返回值类型 方法名 () {}
实现的概述
类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实
现的动作类似继承,格式相仿,只是关键字不同,实现使用 implements 关键字。
非抽象子类实现接口:
- 必须重写接口中所有抽象方法。
- 继承了接口的默认方法,即可以直接调用,也可以重写。
接口的多实现
之前学过,在继承体系中,一个类只能继承一个父类。而对于接口而言,一个类是可以实现多个接口
的,这叫做接口的多实现。并且,一个类能继承一个父类,同时实现多个接口。
优先级的问题
当一个类,既继承一个父类,又实现若干个接口时,父类中的成员方法与接口中的默认方法重名,子类
就近选择执行父类的成员方法。
接口的多继承【了解】
一个接口能继承另一个或者多个接口,这和类之间的继承比较相似。接口的继承使用 extends 关键
字,子接口继承父接口的方法。如果父接口中的默认方法有重名的,那么子接口需要重写一次。
多态
多态是继封装、继承之后,面向对象的第三大特性。
定义
多态: 是指同一行为,具有多个不同表现形式。
父类类型 变量名 = new 子类对象;
变量名.方法名();
父类引用指向子类对象【格式体现】
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的
是子类重写后方法。
多态的好处
实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出
多态的扩展性与便利。
引用类型转换
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。
父类类型 变量名 = new 子类类型();
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。
子类类型 变量名 = (子类类型) 父类变量名;
案例:狗拿耗子
为了避免ClassCastException的发生,Java提供了 instanceof 关键字,给引用变量做类型的校验,格
式如下:
变量名 instanceof 数据类型
如果变量属于该数据类型,返回true。
如果变量不属于该数据类型,返回false。