学生级别的问题,希望stackOverflow能帮我加深对这里的理解:
我注意到 Java API 中的许多方法(例如 Graphics2D 中的方法)都有“抽象”修饰符。这是为什么?
我现在只是在思考继承和多态性,但据我了解,抽象类旨在用作一种由子类扩展的“父类”,并且抽象类本身不能被实例化。
我还理解抽象方法是在抽象类中声明的(但未实现),并且据说必须在子类中实现才能使该子类被视为非抽象的(因此可实例化)。
那么,我如何才能导入像 Graphics2D 这样的类、创建它的实例并使用它的抽象方法呢?
我的导师提到了一些关于在运行时被覆盖的方法(?),但我不明白如何/为什么。显然我在这里遗漏了一些东西,我希望有更多的见解!
最佳答案
So, how is it that I'm able to import a class like Graphics2D, create an instance of it and use its abstract methods?
因为您永远不会Graphics2D
直接创建一个实例。看看你的代码 - 你不会找到这个:
Graphics2D graphics = new Graphics2D(); // This wouldn't compile
...任何地方。相反,您会发现对返回 Graphics2D
的方法的调用,实际上是返回对具体子类实例的引用。或者您可能会提供接受调用者提供的 Graphics
或 Graphics2D
参数的方法...并且调用者可能知 Prop 体类,或者他们也可能从其他地方获得了引用。
在某些方面,这就是重点 - 您甚至想知道这些子类在哪里这一事实证明了整个事情的运作情况......您只需要处理 Graphics2D
,但其实现细节可能因平台等而异。
当您的讲师谈论方法被覆盖时,我怀疑他们实际上说的是覆盖 - 子类可以提供比父类(super class)更具体的方法实现,或者实际上可以提供方法的实现父类(super class)只有抽象方法声明。
关于java - 为什么 Java API 中的许多方法都有 "abstract"修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33161776/