为什么在java中嵌套抽象类

我想知道有一个嵌套的抽象类是什么意思? 例如,

abstract class A{ abstract class B{ } } 

是否存在我们可能需要的用例或场景,例如设计? 或者这种模式中有用的东西吗? 为什么Java允许我们这样做?

在设计中,您希望基类class A只为其派生类提供一个接口。 这意味着,您不希望任何人实际实例化基类的对象。 您只想向上转发(隐式向上转换,它会为您提供多态行为),以便可以使用它的接口。 这是通过使用abstract关键字使该类抽象来实现的。 另一方面,您希望仅使用class A部分function,因此您创建了class B (作为子class B )以减少系统之间的耦合或实现依赖性并防止重复

但是在定义内部类时要记住,没有内部类的代码更易于维护和读取。 当您访问外部类的私有数据成员时,JDK编译器在外部类中创建包访问成员函数,以便内部类访问私有成员。 这留下了一个安全漏洞。 一般来说,我们应该避免使用内部类。 仅当内部类仅与外部类的上下文相关时才使用内部类,并且/或者内部类可以设置为私有,以便只有外部类可以访问它。 内部类主要用于实现辅助类,如迭代器,比较器等,它们在外部类的上下文中使用。 关于abstract class ,它应该是帮助器的抽象 ,假设你的助手应该太复杂,不能为它们编写抽象forms。

在您的情况下,我不记得嵌套抽象类的广泛使用,可能在Swing世界中。

抽象类用于提供inheritance类的部分实现。 它允许您定义类的方案而不提供完整的定义,以便可以在子类中指定它。 它的工作方式有点像接口,因为您可以在从它派生的任何类的实例上执行抽象类中指定的任何操作。 嵌套抽象类被设计为由其他内部类(甚至是我认为的匿名类)inheritance,但不是由最外层类之外定义的类inheritance。

 public class HelloEveryone{ abstract class Hello{ void SayHello(){ System.out.println("Hello!"); } abstract void SayHelloAlt(); } public class HelloWorld extends Hello{ public void SayHelloAlt(){ System.out.println("HelloWorld!"); } } public class HelloUniverse extends Hello{ public void SayHelloAlt(){ System.out.println("HelloUniverse!"); } } void Go(){ ArrayList hellos = new ArrayList(); hellos.add(new HelloWorld()); hellos.add(new HelloUniverse()); for (Hello h : hellos){ h.SayHello(); h.SayHelloAlt(); } } } static void main(){ HelloEveryone hello = new HelloEveryone(); hello.Go(); }