final、枚举、接口
final关键字概述:
1,Final用于修饰类、成员变量和成员方法。
2,final修饰的类,不能被继承。
3,final修饰的所有方法,都不能被重写(可以被重载)。
4,final修饰的变量可以赋值一次。
对于第四点如果是引用数据类型被final修饰的话,那么不能被改变的是引用所保存的内存地址,对象里面的内容是可以改变的。
示例:
public class Test {
public static void main(String[] args) {
final Cat cat = new Cat();
cat.name = "小小";
System.out.println(cat.name);
cat.name = "大大";
System.out.println(cat.name);
}
}
class Cat {
String name;
}
但是如果把上面的cat指向一个新的对象,那么就会报错。
枚举:
枚举简单来说就是把一个问题所有的可能性全部列举出来,就像在大部分软件中的个人的信息里面人的性别只有男,女或者是有的人不想暴露性别这三种选项。有限且能被全部列举出来的就是枚举。
枚举类
- enum和class、interface的地位一样
- 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。
- 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
- 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
- 枚举类的构造器只能是私有的。
定义枚举的格式
[public] enum 枚举名 {
第一行都是枚举实例,这些枚举实例直接写大写名字即可。
}
示例:
枚举人类的性别
public enum Sex {
BOY,GRAIL
}
人类:有性别和名字属性
public class Human {
Sex sex;
String name;
}
测试类
public class Test {
public static void main(String[] args) {
Human human = new Human();
human.name = "小明";
human.sex = Sex.BOY;
System.out.println(human.name + "是一个" + human.sex);
}
}
接口
1,接口是Java中的一种类型【引用数据类型】主要有两个成分:方法,常量。
2,接口通常以interface关键字声明,接口和抽象类一样无法“new”对象。
3,接口不能包含成员变量,除了 static 和 final 变量。
4,接口中的方法全部都是抽象方法。
5,在Java中类是单继承的,但是可以实现多个接口(书写顺序:先继承,后实现)
定义接口的格式:
[public] interface 接口名{
//方法 注意:接口中的抽象方法默认会自动加上public abstract修饰程序员无需自己手写!!
//常量 接口中常量必须要给初始值,常量命名规范建议字母全部大写,多个单词用下划线连接。
}
示例:
public interface A {
void work();
}
类实现接口的格式 :
[修饰符] class 类名 implements 接口名1,接口名2,...{//接口可以同时实现多个接口
//实现所有的抽象方法
}
示例:
接口A
public interface A {
void work();
}
接口B
public interface B {
void speak();
}
实现类C
public class C implements A,B{
@Override
public void work() {
System.out.println("工作方法");
}
@Override
public void speak() {
System.out.println("说话方法");
}
}
测试类
public class Test {
public static void main(String[] args) {
C c = new C();
c.work();
c.speak();
}
}
结果
类和类之间是继承关系关键字是“extends”;类和接口之间是实现关系关键字是“implements”;接口和接口之间也是继承关系关键字也是“extends”。(虽然抽象类也是使用“implements”关键字,但由于抽象类中可以存在抽象方法,甚至可以不用手动重写接口中的方法)