a. 概述
i. final:不可改变。可以修饰类、方法和变量。
ii. 类:被修饰的类,不能被继承。
iii. 方法:被修饰的方法,不能被重写。
iv. 变量:被修饰的变量,不能被重新赋值。
b. 使用方法
i. 修饰类
格式
final class 类名 {
}
ii. 修饰方法
修饰符 final 返回值类型 方法名(参数列表){
//方法体
}
iii. 修饰局部变量(只能赋值一次。)
如:final int num;
num = 10;
num = 20;//报错
iv. 修饰引用类型的变量
public class FinalDemo2 {
public static void main(String[] args) {
// 创建 User 对象
final User u = new User();
// 创建 另一个 User对象
// u = new User(); // 报错,指向了新的对象,地址值改变。
// 调用setName方法
u.setName("张三"); // 可以修改
}
}
v. 修饰成员变量(只能二选一)
1) 显示初始化
public class User {
final String USERNAME = "张三";
private int age;
}
2) 构造方法初始化
Public class User {
final String USERNAME ;
private int age;
public User(String username, int age) {
this.USERNAME = username;
this.age = age;
}
}
二. static关键字
a. 概述
static是静态修饰符
被static修饰的成员,不属于任何一个对象,属于整个类,被所有对象共享。
b. 定义
i. 类变量:
1) 使用 static关键字修饰的成员变量。
2) 格式
static 数据类型 变量名;
ii. 静态方法
1) 静态方法格式
修饰符 static 返回值类型 方法名 (参数列表){
// 执行语句
}
iii. 调用格式
1) 类名.类变量名;(建议)
类名.静态方法名(参数);(建议)
2) 对象名.类变量名;(不建议)
对象名.静态方法名(参数);(不建议)
3) 在当前类的静态方法中直接调用静态方法,格式为:方法名(参数列表)
c. 静态与非静态之间的互相调用
非静态能访问静态(静态不用创建对象就存在)
静态能调静态
非静态能调非静态
三. 接口
a. 概述
接口:是一个引用类型,接口中主要写方法
b. 定义格式
i. 定义类class
定义接口interface
定义枚举enum
定义注解@interface
ii. 格式:
public interface 接口名称 {
// 抽象方法【主要】
public abstract void abs1();
public abstract void abs2();
// 默认方法
public default void m1(){
System.out.println("接口中的默认方法1");
}
public default void m2(){
System.out.println("接口中的默认方法2");
}
// 静态方法
public static void s1(){
System.out.println("接口中的静态方法1");
}
public static void s2(){
System.out.println("接口中的静态方法2");
}
}
【注意】(只有)接口中的抽象方法public abstract关键字可以省略(编译器会自动加上)。
c. 基本的实现
i. 实现格式:
class 类名 implements 接口名 {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】
}
d. 接口的多实现
i. 实现类可以实现多个接口
ii. 格式
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【不重名时可选】
}
• 抽象方法有重名的,只需要重写一次
• 默认方法有重名,必须重写一次。
e. 继承与实现的优先级
i. 格式:(继承和实现可以同时存在)
public class 子类/实现类 extends 父类 implements 接口,...{
}
ii. 继承的优先级 高于 实现,所以必须先extends后implements
f. 接口的多继承(了解)
g. 其它成员特点
i. 接口中,无法定义成员变量,但是可以定义常量(字面值常量,由public static fina修饰的常量)
其值不可以改变,默认使用public static final修饰(可省略,但是编译器会自动添加)
【public static final】 数据类型 常量名 = 值; 【常量名一般纯大写,多个单词之间使用_分隔】
ii. 接口中,没有构造方法,不能创建对象。
iii. 接口中,没有静态代码块