java - 为什么 Java API 中的许多方法都有 "abstract"修饰符?

标签 java oop inheritance polymorphism abstract

学生级别的问题,希望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 的方法的调用,实际上是返回对具体子类实例的引用。或者您可能会提供接受调用者提供的 GraphicsGraphics2D 参数的方法...并且调用者可能知 Prop 体类,或者他们也可能从其他地方获得了引用。

在某些方面,这就是重点 - 您甚至想知道这些子类在哪里这一事实证明了整个事情的运作情况......您只需要处理 Graphics2D,但其实现细节可能因平台等而异。

当您的讲师谈论方法被覆盖时,我怀疑他们实际上说的是覆盖 - 子类可以提供比父类(super class)更具体的方法实现,或者实际上可以提供方法的实现父类(super class)只有抽象方法声明。

关于java - 为什么 Java API 中的许多方法都有 "abstract"修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33161776/

相关文章:

java - 我不明白为什么这个程序不起作用。多态性

java - Android加密数据库

ios - 在处理 Swift 对象和数组时,retainership 真的很重要吗?

javascript - "Object.call"是什么意思?

python - 在类似 Django 的表单实现中使用元类有什么好处?

c# - XML 序列化和继承类型

java - 尝试设置旧版 Java Spring 启动应用程序时出现导入 com.fasterxml.jackson 无法解析错误

java - Maven跳过编译

java - 内部加入 play framework ebean

带参数的 JavaScript 构造函数