b1s*_*kit 4 java oop polymorphism inheritance abstract
学生级别的问题,我希望stackOverflow可以帮助我在这里获得更深入的理解:
我注意到Java API 中的许多方法(例如Graphics2D中的方法)都有"抽象"修饰符.为什么是这样?
我现在只是围绕继承和多态,但正如我所理解的那样,抽象类被用作一种由子类扩展的"父类",抽象类本身不能被实例化.
我也理解抽象方法是在抽象类中声明(但未实现),并且必须在子类中实现,因为该子类被认为是非抽象的(因此是可实例化的).
那么,我怎么能导入像Graphics2D这样的类,创建它的实例并使用它的抽象方法呢?
我的讲师提到了一些关于在运行时被覆盖的方法(?),但我不明白如何/为什么.显然我在这里缺少一些东西,我更喜欢洞察力!
那么,我怎么能导入像Graphics2D这样的类,创建它的实例并使用它的抽象方法呢?
因为您永远不会Graphics2D 直接创建实例.看看你的代码 - 你不会发现这个:
Graphics2D graphics = new Graphics2D(); // This wouldn't compile
Run Code Online (Sandbox Code Playgroud)
......任何地方.相反,您将找到对返回 a的方法的调用Graphics2D,这些方法实际上返回对具体子类实例的引用.或者,您可能会提供接受调用者提供Graphics的Graphics2D参数或参数的方法......并且调用者可能知道具体类,或者他们也可能从其他地方获得了参考.
在某些方面,这就是重点 - 事实上你甚至想知道这些子类在哪里证明了整个事情的运作情况......你只需要处理Graphics2D,但实现细节可能会有所不同按平台等
当你的讲师谈论被覆盖的方法时,我怀疑他们实际上已经覆盖了 - 子类可以提供比超类更具体的方法实现,或者实际上可以提供超类只有抽象方法声明的方法.