java—如何创建一个子类的对象,该子类扩展另一个类,该类位于另一个类中?

dced5bon  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(514)
public class A{
      public static class B{
             public class B1 extends B{
             //it contains a constructor and some methods
             }
       }
         public static void main(...){
       //create B1 object here
       }
}

当我拆分类时,它工作得很好,但是我需要将它们放在一个java文件中。如何在类a的main中创建b1对象?

a9wyjsp7

a9wyjsp71#

public class B1 extends B{ 这是个错误。
内部类有一个秘密的、不可见的父类类型的字段。因此,b1类既扩展了b,又有一个类型为b的字段,该字段没有名称,但仍然存在(您需要它来生成b1的任何示例)。那不可能是对的。
你可能想要的是:

public static class B1 extends B { ... }

一旦它是静态的,您可以简单地编写: new B1(); ,或者如果您没有直接导入b1, new A.B.B1(); . 没有它,你只能写作 new A.B.B1() 在这样的背景下 this 引用将引用b的示例:例如在b的任何非静态方法中。在这种情况下,你必须写下例如:

A.B b = new A.B();
b.new A.B.B1();

为了“设置”该隐藏字段(它将指向同一对象) b 变量指向此处)。但是。。。你不要这个。现在你的b1示例都是一个b并且持有一个b,这将是非常混乱的。只需将b1设为“静态”。事实上,除非你们两个都非常确定自己需要一个内部示例,而且你们完全理解它是如何工作的,否则要使所有的内部类都是静态的。

lf3rwulv

lf3rwulv2#

要访问非静态内部类,请创建外部类的对象,并使用该对象访问内部类,如下所示:

B b = new B();
B.B1 obj= b.new B1();

访问这里的java内部类(嵌套类)链接并练习。

相关问题