我有一个关于Java中的本地类的问题(在方法中声明的类或由 { } 限制的块中的类)。
有什么理由不将本地类声明为final吗?我们不能从本地类继承其他类(如果它没有在同一范围内定义),但是当我们将其声明为final时,也许编译器可以使代码更简单?
谢谢!
我有一个关于Java中的本地类的问题(在方法中声明的类或由 { } 限制的块中的类)。
有什么理由不将本地类声明为final吗?我们不能从本地类继承其他类(如果它没有在同一范围内定义),但是当我们将其声明为final时,也许编译器可以使代码更简单?
谢谢!
人们似乎对匿名类和本地类有点困惑。这是一个本地类:
public void m() {
class MyClass{}
MyClass cl = new MyClass();
}
您可以声明MyClass
final,但实际上可以从它继承,因此 Java 中的其他任何地方都可以将其声明为 final 以避免这种情况:
public void m() {
class MyClass{}
MyClass cl = new MyClass();
class MyOtherClass extends MyClass{}
MyOtherClass cl2 = new MyOtherClass();
}
据我所知,匿名类不被认为是最终的。但是,从语法上讲,没有办法从它们继承,因此需要一个强大的类文件 hack 才能这样做。
没有理由不这样做,除非它是您的代码中不需要的关键字。IE。没有理由不这样做,也没有理由这样做。如果类在方法中声明,则不能从任何其他地方访问它,因此不能被子类化。那么,为什么要阻止无法完成的事情呢?
所以添加这个词不会以任何方式改变行为,但会弄乱你的代码。有人可能会想“为什么这门课是决赛,我是不是漏掉了什么花哨的东西?”
“在方法中声明的类”是匿名类,“在以 {} 为界的块中声明的类”是内部类。
匿名类不能被声明为,final
因为没有办法继承它。
内部类可以是final
,除非它有任何子类。