显式 是在源代码中写的东西。因此,如果将某些东西声明为
public final class,则意味着该类是 明确的final 。
隐式 不是在源代码中写下的,而是在某种构造的上下文中或基于语言规则的情况下,元素的行为与使用指定修饰符声明的行为相同。
例如,
enum声明中的关键字
enum SomeEnum {}导致SomeEnum为
final,因为语言规则对其进行了规定。其效果与关键字的效果相同
final。
匿名类隐式最终的示例是因为不存在任何语言构造可覆盖匿名类。因此,它的行为就像是
final。我认为“有效”一词在这里更好。
但是,您不能基于反射呈现事物的方式做出假设。考虑以下代码段:
public class Test { interface SomeInterface { } abstract interface SomeAbstractInterface { } static abstract class SomeAbstractClass { } enum SomeEnum { } public static void main(String arg[]) { System.out.println(Modifier.toString(SomeInterface.class.getModifiers())); System.out.println(Modifier.toString(SomeAbstractInterface.class.getModifiers())); System.out.println(Modifier.toString(SomeAbstractClass.class.getModifiers())); System.out.println(Modifier.toString(SomeEnum.class.getModifiers())); }}结果是这样的:
abstract static interfaceabstract static interfaceabstract staticstatic final
无论
interface与
abstractinterface被认为是一个抽象接口。通过反射它们也被认为是静态的。显然,在解析和编译Java源代码的过程中,可以删除或添加一些修饰符。


![匿名内部类和Final修饰符[重复] 匿名内部类和Final修饰符[重复]](http://www.mshxw.com/aiimages/31/410392.png)
