一、final 关键字
1. final 用于修饰不可改变的内容
代码语言:javascript复制① 修饰类,被修饰的类不能被继承。
② 修饰方法,被修饰的方法不能被重写。
③ 修饰变量,被修饰的变量不能重新赋值。
2. final 的使用
代码语言:javascript复制① 修饰类
* final class 类名{ ··· }
② 修饰方法
* final 返回值类型 方法名( 参数列表 ) { ··· }
③ 修饰变量
* final 数据类型 变量名;
二、权限修饰符
| | 同一个类中 | 同一个包中 | 不同包的子类 | 不同包的无关类 | | public | ✓ | ✓ | ✓ | ✓ | | protected | ✓ | ✓ | ✓ | | | default | ✓ | ✓ | | | | private | ✓ | | | |
三、内部类
1. 成员内部类
代码语言:javascript复制① 格式
//外部类
class 类名 {
//内部类
class 类名 {
···
}
}
② 注意
* 成员内部类定义在类中方法外
* 内部类可以直接访问外部类的成员,包括私有成员
* 外部类要想访问内部类的成员必须先创建内部类对象
2. 局部内部类
代码语言:javascript复制① 格式
class 类名 {
修饰符 返回值类型 方法名( 参数列表 ) {
class 类名 { //局部内部类
···
}
}
}
② 注意
* 局部内部类定义在方法中
* 局部内部类访问的局部变量必须是【有效final】# java 8 若变量不改变,final 可以省略 #
* 局部内部内在堆中,局部变量在栈中,方法出栈后,局部变量消失,局部内部类等待 JVM 回收
3. 匿名内部类 ☆☆☆☆☆
代码语言:javascript复制① 格式
父类或接口名 对象名 = new 父类或接口 {
//方法重写
@Override
}
② 使用方法
* 对象名.方法名();
* new 父类或子类接口 { ··· }.方法名();
③ 注意
* 【等号左边】 是多态,父类引用指向子类对象。
* 【等号右边】 定义并创建父类或接口的类对象。
* 匿名内部类是省略了【实现类/子类】名称,匿名对现象是省略了【对象名】。
④ 示例
//接口
public interface Inter {
//抽象方法
public abstract void method();
}
//测试类
public class InterAnonymous {
public static void main(String[] ards) {
//匿名内部类
new Inter {
public void method() {
System.out.println("使用了匿名内部类和匿名对象");
}
}.method();
}
}