当我使用一个尚未编写的超类方法时,Java中会发生什么?

当我使用一个尚未编写的超类方法时,Java中会发生什么?,java,swing,inheritance,Java,Swing,Inheritance,考虑下面的Java代码,如果JPanel类中没有paintComponent方法,会发生什么 它不会编译。如果它在编译时存在,但在运行时不存在,那么它将抛出一个错误。它不会编译。如果它在编译时存在,但在运行时不存在,那么它将抛出一个错误。在超类中总会有一个实现 JPanel实现paintComponent()。因此,您不必担心它。超级类中总会有一个实现 JPanel实现paintComponent()。所以,你不必担心 如果这是你要问的具体情况,那么它总是存在的 如果你问的是一般情况,那么它不

考虑下面的Java代码,如果JPanel类中没有paintComponent方法,会发生什么


它不会编译。如果它在编译时存在,但在运行时不存在,那么它将抛出一个错误。

它不会编译。如果它在编译时存在,但在运行时不存在,那么它将抛出一个错误。

在超类中总会有一个实现


JPanel
实现
paintComponent()
。因此,您不必担心它。

超级类中总会有一个实现

JPanel
实现
paintComponent()
。所以,你不必担心

  • 如果这是你要问的具体情况,那么它总是存在的
  • 如果你问的是一般情况,那么它不会编译
  • 如果这是你要问的具体情况,那么它总是存在的
  • 如果你问的是一般情况,那么它不会编译
  • 在编译时
    • 该方法应该出现在超类层次结构中的任何类中,否则编译将失败

    • 将调用该层次结构中的类的方法(从底部开始)

    在运行时
    • 若方法未找到,它将抛出一个错误
    在编译时
    • 该方法应该出现在超类层次结构中的任何类中,否则编译将失败

    • 将调用该层次结构中的类的方法(从底部开始)

    在运行时
    • 若方法未找到,它将抛出一个错误

    是否存在我不知道在运行时不存在的情况?编译器可以、必须并且将静态地检查这一点,因此在成功编译后(或者我遗漏了什么),没有选项让它“不在那里”?编译ShapesJPanel类,但使用不同版本的JPanel类部署它,该类没有此方法。是否存在我不知道在运行时它不会出现的情况?编译器可以、必须并且将静态地检查这一点,因此在成功编译(或者我是否遗漏了什么)后,没有选项让它“不存在”?编译ShapesJPanel类,但使用没有此方法的不同版本的JPanel类部署它。只需将paintComponent重命名为其他内容(例如dummyMethod())并尝试编译。您将自己发现发生了什么。只需将paintComponent重命名为其他名称(例如dummyMethod())并尝试编译即可。你自己会发现发生了什么。
    import javax.swing.JPanel;
    
    public class ShapesJPanel extends JPanel
    {
    
         public void paintComponent( Graphics g )
         {
           super.paintComponent( g );
           //more codes here  
         }
    }