Java中的私有抽象类
我是Java的新手。我最近在浏览一些Android应用程序源代码时,在一个普通类中遇到了一个私有的静态抽象类。这种嵌套类的用例是什么?如何使用它?使用这样的类有什么样的设计好处?我以前从未遇到过这种模式,但我可以想象,如果:Java中的私有抽象类,java,class,private,abstract,Java,Class,Private,Abstract,我是Java的新手。我最近在浏览一些Android应用程序源代码时,在一个普通类中遇到了一个私有的静态抽象类。这种嵌套类的用例是什么?如何使用它?使用这样的类有什么样的设计好处?我以前从未遇到过这种模式,但我可以想象,如果: 您希望以类似的方式在一组嵌套类中实现接口(例如,从封闭类中的公共方法返回) 这些接口实现有许多共同的代码(因此是抽象类) 除了实现之外,您不需要任何代码来了解抽象类 抽象类的子类也可能是私有的。(通常在我编写嵌套类时,它们是私有实现细节。)例如: public inte
- 您希望以类似的方式在一组嵌套类中实现接口(例如,从封闭类中的公共方法返回)
- 这些接口实现有许多共同的代码(因此是抽象类)
- 除了实现之外,您不需要任何代码来了解抽象类
public interface Foo {
// Methods here
}
public class FooFactory {
public static Foo getFoo1() {
return new Foo1();
}
public static Foo getFoo2() {
return new Foo2();
}
private static abstract class AbstractFoo implements Foo {
// Implement methods in Foo in terms of
// doSomething()...
// Implementation-specific method
public abstract void doSomething();
}
private static class Foo1 extends AbstractFoo {
public void doSomething() {
}
}
private static class Foo2 extends AbstractFoo {
public void doSomething() {
}
}
}
我以前从未遇到过这种模式,但我可以想象,如果:
- 您希望以类似的方式在一组嵌套类中实现接口(例如,从封闭类中的公共方法返回)
- 这些接口实现有许多共同的代码(因此是抽象类)
- 除了实现之外,您不需要任何代码来了解抽象类
public interface Foo {
// Methods here
}
public class FooFactory {
public static Foo getFoo1() {
return new Foo1();
}
public static Foo getFoo2() {
return new Foo2();
}
private static abstract class AbstractFoo implements Foo {
// Implement methods in Foo in terms of
// doSomething()...
// Implementation-specific method
public abstract void doSomething();
}
private static class Foo1 extends AbstractFoo {
public void doSomething() {
}
}
private static class Foo2 extends AbstractFoo {
public void doSomething() {
}
}
}
这种嵌套类的用例是什么
如果出现以下情况,您将使用此选项:
- 您将要实现许多具有公共功能的嵌套类
- 您不希望具有该功能的基类可见
final
或private
如何使用它?使用这样的类有什么样的设计好处
见上文。基本上,您正在隐藏该类,以便它不能在最外层的封闭类之外直接子类化。我认为这也将防止子类在最外层的封闭类之外以多态方式使用
这不是一个常见的用例,但我认为它在您发现它的上下文中是合理的
这种嵌套类的用例是什么
如果出现以下情况,您将使用此选项:
- 您将要实现许多具有公共功能的嵌套类
- 您不希望具有该功能的基类可见
final
或private
如何使用它?使用这样的类有什么样的设计好处
见上文。基本上,您正在隐藏该类,以便它不能在最外层的封闭类之外直接子类化。我认为这也将防止子类在最外层的封闭类之外以多态方式使用
这不是一个常见的用例,但我认为它在您找到它的上下文中是合理的。一个典型的用法是替换C结构的等价物-例如,一个包含名称和值并存储在封闭类中的列表或映射中的小类。因为它不在编译单元之外使用,所以它可以是私有的 这里的静态关键字用法有点奇怪;这意味着该类与封闭类没有连接
将其抽象化是不寻常的——它表明将有具体的实现,而我从来没有这样做过。YMMV…一个典型的用法是替换C结构的等价物-例如,一个包含名称和值并存储在封闭类的列表或映射中的小类。因为它不在编译单元之外使用,所以它可以是私有的 这里的静态关键字用法有点奇怪;这意味着该类与封闭类没有连接
将其抽象化是不寻常的——它表明将有具体的实现,而我从来没有这样做过。YMMV…嵌套类的目的是清楚地将嵌套类与其周围的类分组,表示这两个类将一起使用 嵌套类被视为其封闭类的成员。因此,嵌套类可以声明为public、package(无访问修饰符)、protected和private(有关更多信息,请参阅访问修饰符)。 静态嵌套类 静态嵌套类声明如下:
public class Outer {
public static class Nested {
}
}
为了创建嵌套的实例,必须通过在其前面加上外部类名来引用它,如下所示:
public class Outer {
public static class Nested {
}
}
Outer.Nested实例=新建Outer.Nested()代码>
静态嵌套类本质上是嵌套在另一个类中的普通类。它以相同的方式与其封闭类交互。由于是静态的,静态嵌套类只能通过对封闭类实例的引用来访问封闭类的实例变量 嵌套类的目的是清楚地将嵌套类与其周围的类分组,表示这两个类将一起使用
嵌套类被视为其封闭类的成员。因此,嵌套类可以声明为public、package(无访问修饰符)、protected和private(有关更多信息,请参阅访问修饰符)。
静态嵌套类
静态嵌套类声明如下:
public class Outer {
public static class Nested {
}
}
为了创建嵌套的实例,必须通过在其前面加上外部类名来引用它,如下所示:
public class Outer {
public static class Nested {
}
}
Outer.Nested实例=新建Outer.Nested()代码>
静态嵌套类本质上是嵌套在另一个类中的普通类。它与其封闭的cla相互作用