static 和 abstract 关键字可以在 java 中一起使用吗?
Can static and abstract keyword used together in java?
据我所知,static 和 final 的组合可以一起使用,但是 static 和 abstract 或 final 和 abstract 的组合在 java 中是不允许的。但是我在某些地方看到了如下代码
public class Enclosing {
private static int x = 1;
public static abstract class StaticNested {
public abstract void run();
}
}
谁能解释一下这个场景的概念和实际用途。
static
和 abstract
可以一起用于 嵌套 classes, 例如
class A {
static abstract class B {
abstract void someMethod();
}
}
B
是一个 static
嵌套 class 需要具体的子 class 来实现 someMethod()
.
但不能一起用于方法,例如
static abstract void someMethod(); // compile error
当然 abstract
和 final
不能一起使用 - 这样的组合是没有意义的。
static abstract class
的使用
static abstract class
的合适用途是用于只有您的 class 使用的类似节点的对象,例如 class 表示映射中的条目(例如 java.util.Map.Entry
是一个 interface
,但可能是一个静态抽象 class),或者是一个 LinkedList
的节点的 class,但是实现留给封闭 class 的实现,它们本身也通过扩展它来使用和提供嵌套 class 的实现。
据我所知,static 和 final 的组合可以一起使用,但是 static 和 abstract 或 final 和 abstract 的组合在 java 中是不允许的。但是我在某些地方看到了如下代码
public class Enclosing {
private static int x = 1;
public static abstract class StaticNested {
public abstract void run();
}
}
谁能解释一下这个场景的概念和实际用途。
static
和 abstract
可以一起用于 嵌套 classes, 例如
class A {
static abstract class B {
abstract void someMethod();
}
}
B
是一个 static
嵌套 class 需要具体的子 class 来实现 someMethod()
.
但不能一起用于方法,例如
static abstract void someMethod(); // compile error
当然 abstract
和 final
不能一起使用 - 这样的组合是没有意义的。
static abstract class
的使用
static abstract class
的合适用途是用于只有您的 class 使用的类似节点的对象,例如 class 表示映射中的条目(例如 java.util.Map.Entry
是一个 interface
,但可能是一个静态抽象 class),或者是一个 LinkedList
的节点的 class,但是实现留给封闭 class 的实现,它们本身也通过扩展它来使用和提供嵌套 class 的实现。