【问题标题】:Abstract classes cannot be instantiated抽象类不能被实例化
【发布时间】:2014-04-27 16:44:25
【问题描述】:

抽象类不能被实例化。然后在 public void paint(Graphics g){ } g 是什么?它不是一个对象吗?如果是,那么这与可以实例化的有什么区别?

【问题讨论】:

标签: java abstract-class


【解决方案1】:

抽象类不能直接实例化。但它们的全部意义在于通过可以实例化的具体(即非抽象)类来扩展。

因此,在您的示例中,g 是某个 GraphicsImpl 子类的实例(这是一个虚构的名称,实际名称不是那个),它扩展了 Graphics 并实现了它的所有抽象方法。

【讨论】:

    【解决方案2】:

    g 是一个来自扩展Graphics 类的类的对象。

    【讨论】:

      【解决方案3】:

      抽象类不能被实例化,该抽象类的非抽象子类可以被实例化:

      public abstract class Graphics {
          // new Graphics() would not compile
      }
      
      // ...
      
      public class Mygraphics extends Graphics {
          // new Mygraphics() would compile
      }
      

      【讨论】:

        【解决方案4】:

        抽象类只是部分定义,需要进一步实现才能使它们工作。给你一个关于图形的例子:有一种不同的方法来绘制一个矩形(从 0,0 到 0,b,到 a,b,到 a,0,到 00 的线)和一个圆(在r 到某个中心点的距离)。这意味着,您不能在 Graphics 类中定义它们的绘制方式,而是在从它继承的类中定义。但是,它们都有一些已经定义的属性,这些属性来自抽象类,例如可能是颜色。

        【讨论】:

          【解决方案5】:

          abstract 关键字表示的任何类都不能被实例化,并且需要一个子类。您应该花一些时间阅读一些关于面向对象编程的理论以及抽象的含义(以及一般的类层次结构,特别是类扩展)。

          如果对某个类有疑问,请查看 Javadoc,无论是在您的 IDE 中还是在 Web 上(如果它是公共类)内联。对于有问题的 Graphics 类(“g”变量),请看这里:Graphics (Java Platform SE 7)

          为了给你指明正确的方向,你可能想看看这个answer

          【讨论】:

            【解决方案6】:

            是的,您不能实例化抽象类。 g 确实是Graphics子类 的一个实例。

            这里是如何使用它的示例:Sample example

            【讨论】:

              猜你喜欢
              • 2020-04-29
              • 2016-09-21
              • 2013-08-23
              • 1970-01-01
              • 2013-11-21
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多