我想要一个抽象类A.
然后我想要一个B只能被实例化的类A.没有其他人可以访问B- 只A.
然后我想要A一个返回实例的方法B.
我的尝试:
public abstract class A {
public static B getInstanceOfB() {
return new B();
}
private class B {
}
}
Run Code Online (Sandbox Code Playgroud)
这当然不起作用.我怎样才能做到这一点?
你可以做你想做的通过使类B为private static:
public abstract class A {
...
private static class B {
...
}
}
Run Code Online (Sandbox Code Playgroud)
如果该类B不是static,则应该有一个A要访问的实例B.如果要在B不实例化的情况下实例化A,则应该创建内部类static.
也许有,你做的原因A是abstract和B私有内部类.我认为内容是你只想暴露接口并隐藏具体的实现类型.因为抽象类是用于子类化的,所以这可以通过将B子类型作为子类型A并声明公共接口来实现A.
public abstract class A {
...
private static class B extends A {
...
Run Code Online (Sandbox Code Playgroud)
现在,您可以创建B范围之外的实例A,只要您指定对象的类型A,如下所示:
A b = A.getInstanceOfB();
Run Code Online (Sandbox Code Playgroud)
最好从方法名称中删除特定类型的符号,并通过传递参数来指定它.
A b = A.getInstance(...);
Run Code Online (Sandbox Code Playgroud)
您可以在getInstance()工厂方法中创建所需类型的对象作为指定参数.
好吧,如果A不应该像这样使用,你可以为类声明一个公共接口,B并将其用作B范围之外的类型A.
public interface IB {...}
Run Code Online (Sandbox Code Playgroud)
和
public abstract class A {
...
private static class B implements IB {
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |