final关键字,代码块,接口
final 关键字
什么是final关键字
final代表最终的意思.可以修饰类,方法,变量
特点:
修饰类: 不能被继承
不想让别人对被修饰的类进行拓展功能
修饰方法: 方法不能被重写
修饰变量:
-
基本数据类型的变量: 修饰后值不能被改变,一般用与定义常量
1.1常量的命名规范: 如果是一个单词,所有字母大写,如果是多个单词,所有字母大写,并把单词与单词之间用_分开
-
引用数据类型的变量: 修饰后地址值不能被改变,就是说不能给把别的变量地址给这个变量,也不能为这个变量重新开辟空间.但是,空间里存放的值,是可以改变的.
接口
接口介绍
什么是接口?
接口的本质也是类,它也是抽象类,它比抽象类还抽象,如果一个类中所有的方法都是抽象方法,这个类就可以定义成接口
作用:接口用来定义类具有哪些功能
接口的作用
1.用来定义规范类
2.用来做程序功能的拓展,比如说笔记本的触摸板,你用着不舒服,你可以通过usb接口,加一个鼠标,这就是功能的拓展
接口的定义格式和特点
如何使用接口?
接口用关键字interface修饰
public interface 接口名字{
public abstract 返回值类型 方法名1();
public abstract 返回值类型 方法名2();
.
.
.
}
接口和类的关系
接口和类的关系是实现关系,通过implements来表示
public class 类名 implements 接口名 {
...
}
使用接口时的注意事项
实现类的命名规则: 接口名+Impl
接口和类的实现关系,可以单实现,也可以多实现;
一个类实现多个接口的时候,之间用逗号隔开
public class 类名 implements 接口名1,接口名2,... {
...
}
接口有什么特点
1.接口中没有构造方法
2.接口不能实例化(就是不能创建对象)
3.不是抽象类的子类必须实现接口中所有的抽象方法
接口的成员特点
成员变量
只能是静态常量
默认修饰符: public static final
public static final int NUM_VLUE = 10 ;
构造方法
接口中没有构造方法,因为接口主要是拓展功能的,没有具体的存在
成员方法
只能是抽象方法(在jdk7版本以前)
默认修饰符: public abstract
public abstract void show();
JDK8版本中接口成员的特点
默认方法
什么是默认方法
在JDK8版本后,允许在几口中定义非抽象方法,但是需要关键字default修饰,这些方法就是默认方法
如何使用默认方法
格式: public default 返回值类型 方法名(参数列表){}
范例:
public default void showB(){
System.out.println("interB......Show");
}
注意事项
- 默认方法不是抽象方法,所以不强制重写,但是可以被重写,重写的时候去掉default
- public 可以省略,default不能省略
- 如果实现了多个接口,多个接口中存在相同的默认方法声明,子类就必须对该方法进行重写
静态方法
如何使用接口中的静态方法?
格式: public static 返回值类型 方法名(参数列表){}
public static void show(){
}
为什么要使用静态方法?
为了方便方法的调用
注意事项
- 静态方法只能通过接口来进行调用,不能通过实现类名,或实现类对象来进行调用
- public可以省略,但是static不能省略
私有方法
如何使用私有方法?
普通方法
格式:private 返回值类型 方法名 (参数列表){}
范例1:
private void show(){
}
静态方法
格式:private static 返回值类型 方法名(参数列表){}
范例2:
private static void method(){
}
为什么要在接口中使用私有方法?
提高代码的复用性
接口的使用思路
- 如果发现一个类中所有的方法都有抽象方法,可以使用接口;
- 涉及到接口大面积升级,而不想修改每一个实现类,就可以将更新方法,定义为带方法体的默认方法;(jdk8及后续版本)
- 希望默认方法调用更加简洁,可以考虑设计为static(jdk8及后续版本)
- 默认方法中出现了重复代码,可以抽取出一个私有方法(jdk9及后续版本)
类与类,类与接口和接口与接口的关系
类与类
继承关系,只能单继承不能多继承,但是可以多层次继承
类与接口
实现关系,可以单实现,也可以多实现;
还可以在继承一个类的同时,实现多个接口
如果直接父类和接口中出现了相同的方法声明,但是代码逻辑不一样,优先使用直接父类的代码逻辑
接口与接口的关系
继承关系,可以单继承,也可以多继承,如果继承的接口中又同名的默认方法,必须要进行重写