加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 抽象类返回私有嵌套类的实例

发布时间:2020-12-15 04:16:46 所属栏目:Java 来源:网络整理
导读:我想要一个抽象类A. 然后我想要一个只能由A实例化的B类.没有其他人可以访问B – 只有A. 然后我希望A有一个返回B实例的方法. 我的尝试: public abstract class A { public static B getInstanceOfB() { return new B(); } private class B { }} 这当然不起作
我想要一个抽象类A.

然后我想要一个只能由A实例化的B类.没有其他人可以访问B – 只有A.

然后我希望A有一个返回B实例的方法.

我的尝试:

public abstract class A {

    public static B getInstanceOfB() {
        return new B();
    }

    private class B {

    }

}

这当然不起作用.我怎样才能做到这一点?

解决方法

你可以把B类作为私有静态做你想做的事:

public abstract class A {
  ...

  private static class B {
    ...
  }

}

如果类B不是静态的,则应该有一个A实例来访问B.如果要在不实例化A的情况下实例化B,则应该使内部类静态.

也许有理由将A作为抽象而B作为私有内部类.我认为内容是你只想暴露接口并隐藏具体的实现类型.因为抽象类是用于子类化的,所以这可以通过将B作为A的子类型并在A中声明公共接口来实现.

public abstract class A {
  ...
  private static class B extends A {
    ...

现在,您可以在A的范围之外创建B的实例,只要您将对象的类型指定为A,如下所示:

A b = A.getInstanceOfB();

最好从方法名称中删除特定类型的符号,并通过传递参数来指定它.

A b = A.getInstance(...);

您可以在getInstance()工厂方法中创建所需类型的对象作为指定参数.

好吧,如果不应该像这样使用A,你可以为B类声明一个公共接口,并将其用作A范围之外的B类型.

public interface IB {...}

public abstract class A {
  ...
  private static class B implements IB {
    ...

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读