在java文件外定义内部类

我想创建一个类ClassB作为ClassA内部类,但我想在ClassA.java文件外写下来。

我怎样才能做到这一点?

它将是很多内部类,而ClassA.java文件将是巨大的

UPDATE
我真正想要做的是定义十个类,它们只能由一个类访问。 所有这些都在同一个包中定义。

谢谢。

将所有类放在一个包中,并将类定义为包私有。

 package com.example.here class Hello{ //... } 

注意没有关键字public ? 如果创建它的类在com.example.here包中,您将只能创建Hello类的实例。

简单的答案,不是你不能。

由于是一个内部类,该类必须在父类的范围内。

如果你的课程真的很大,那么它可能会说明你class级的设计。 你正在正确使用封装吗?

UPDATE
我真正想要做的是定义十个类,它们只能由一个类访问。 所有这些都在同一个包中定义。

如果要限制对单个类的访问,可以将它们全部放在新包中。 您还需要将允许访问的指定类移动到此包中。 对于新类,您可以使用默认访问级别(无public / private / protected修饰符)来限制访问。 这将使它们只能访问其包中的类。 允许访问的指定类可以公开,以便可以在此新包之外使用它。

注意:您可以选择限制类的可见性或构造函数的可见性。

试试以下……

  • 将外层的引用移交给不再内在的阶级
  • 使用包并使不再内部类包私有(Jeremy的回答)
  • 在极少数情况下,实际上最好与内部课程一起使用,同时让他们在其他地方工作。 如果这真的是你,请继续阅读……

如何保持内部小class

a)从外部阶级扩展

 class Outer { class SomeInnerClass extends SomeClass { // More specific code here } } class SomeClass { // A lot of generic code here (in a different file) } 

b)使用抽象方法

使用内部类的(更正确的)原因之一通常与使用外部类的确切实例有关。 要在基类中以通用方式处理它,请使用抽象getter。

 abstract class SomeClass { protected abstract SpecificData getSpecificData(); void someMethod() { SpecificData specificData = getSpecificData(); // Do work with the "specific data" here ... } } class Outer { private SpecificData mSpecificData = new SpecificData(); class SomeInnerClass extends SomeClass { @Override protected SpecificData getSpecificData() { return OuterClass.mSpecificData; } } } 

我想你明白了,…你也可以考虑使用一些GeneralData类或接口(在SomeClass ),并让getSpecificData()返回一个更具体(下降)的实例。

再说一遍:这可能会非常误用于创建非常糟糕的不可读代码,但它也可以在适当的情况下用于非常好的模式,无论如何它应该回答原始问题。