在Java(以及Android)中,static class
和final class
声明的用途是什么?
我的问题不是静态实例,而是类声明,如
static class StaticClass {
//variables and methods
}
和
final class FinalClass {
//variables and methods
}
谢谢,
答案 0 :(得分:8)
静态嵌套类
与类方法和变量一样,静态嵌套类与其外部类相关联。和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法:它只能通过对象引用来使用它们。 注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包。
使用封闭的类名访问静态嵌套类:
OuterClass.StaticNestedClass
例如,要为静态嵌套类创建对象,请使用以下语法:
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();
http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
最终课程
声明为final的类不能被子类化。这特别有用,例如,在创建类似String类的不可变类时。
http://docs.oracle.com/javase/tutorial/java/IandI/final.html
答案 1 :(得分:3)
final classes将限制进一步扩展(继承)。
您不能在外部类上使用static关键字,static只允许用于内部类Static classes
答案 2 :(得分:1)
答案 3 :(得分:1)
你最后上课,所以不能扩展。通常,如果您要创建库(或处理大型项目的一部分),则有意义,因此您的客户端无法扩展类并修改现有行为。在你自己的课程中,除非它是一个大课程而且你无意中忘记了事情,否则没有理由去上课。
静态内部类适用于逻辑上属于外部(包含)类但不依赖外部类状态的内容。例如,您可以拥有Parser类和内部Parser.Listener类。通常,如果您决定让内部类尝试,首先,如果可能的话,将其设置为静态,以简化操作。
你可以在没有最终和静态内部类的情况下使用你可以找到它们的经验。
答案 4 :(得分:1)
其他类无法扩展最终类exmple String是final类,因此无法扩展此类。 你不能将'top-level'类声明为static。你只能使用修饰符'static'的内部类。 static inner class只访问外部类的静态成员
答案 5 :(得分:0)
你不能将一个类标记为静态吗? 是的,如果它是嵌套类 不,如果是正常班级。 如果你标记一个嵌套类static它将作为完全标记的类工作,只需使用classname.staticClassNmae来访问它。
如果你把一个类标记为final,那么它就不能被继承,这是java中这个 String 类的一个很好的例子。