当前位置: 首页 > 知识库问答 >
问题:

如何绕过父类paint方法的调用

鄢博简
2023-03-14

我正在开发小程序,我的类扩展了一个第三方api类,它有它的油漆(图形g)方法。这个类扩展了JComponent,并从它的油漆(图形g)调用super.paint(g)。现在我想直接从我的类调用JComponent油漆方法。有什么方法可以做到这一点。我在下面尝试,但给出错误

getParent().getParent().paint(g);

或者你可以通过跟随来理解这一点

ThirdPartyClass extends JComponent{

    public void paint(Graphics g){
     super.paint(g);
     //some work
    }
}

MyClass extends ThirdPartyClass{

   public void paint(Graphics g){
      getParent().getParent().paint(g);  // not working giving exceptions
   }
}

共有2个答案

湛光明
2023-03-14

getParent()方法的作用与您认为的不同。它与继承和超类无关。它只返回这个组件所在的awt容器。

例如,如果组件位于面板内的滚动窗格内,那么在组件中调用getP业已(). getP业已()。油漆(g);调用面板的油漆方法。

颜祖鹤
2023-03-14

首先,get家长不会得到继承父级;它会得到组件父级,所以您正在尝试的并不是您想要的,即使它确实有效。

其次,我认为是时候重新考虑你的小程序设计了。如果你不想要继承的类的行为,那你为什么要继承它呢?为什么不直接从组件继承呢?我认为如果你试图让你的类成为第三方的子类,然后绕过第三方的一些行为,但不是全部,可能会有各种各样的后果。

 类似资料:
  • 问题 你想在子类中调用父类的某个已经被覆盖的方法。 解决方案 为了调用父类(超类)的一个方法,可以使用 super() 函数,比如: class A: def spam(self): print('A.spam') class B(A): def spam(self): print('B.spam') super().spam()

  • 大家好,我对java很陌生,还在学习OOP原理。直接回答问题。所以我有一个抽象类和两个继承自它的类。看起来是这样的: 现在我做到了: 在这一点上,我想做或(当然不是两者都做,因为我创建了一个孩子),但我两者都不能做。

  • 问题内容: 在Python中创建简单的对象层次结构时,我希望能够从派生类中调用父类的方法。在Perl和Java中,有一个用于此的关键字()。在Perl中,我可以这样做: 在Python中,似乎必须从子代中明确命名父类。在上面的示例中,我将不得不执行。 这似乎不正确,因为这种行为使创建深层次结构变得困难。如果孩子们需要知道哪个类定义了一个继承的方法,那么就会造成各种各样的信息痛苦。 这是python

  • 这是一个与实现相关的问题,或者我可能想多了。假设我有一个子类继承了父类。根据我的理解,它将继承父类的方法定义,而不是构造函数。我们需要通过超级方法调用提供或编译器将提供构造函数。我们这样做的原因是,如果没有父类对象实例,我们从子类中的父类获得的方法定义将不存在。 这是否意味着,当我调用父类对象定义的方法(该方法尚未在子类中重写)时,将在父对象实例的子类内部调用?我在想,由于子类会调用父类构造函数并

  • 本文向大家介绍java 父类子类有同名方法时如何调用的实现,包括了java 父类子类有同名方法时如何调用的实现的使用技巧和注意事项,需要的朋友参考一下 父类引用默认调用子类重写的方法 如果父类的引用p指向了子类的实例,则通过这个引用p访问同名方法时,调用的是子类重写的方法。 父类引用p可以指向不同的子类,调用不同子类重写的不同的同名方法,进而达到类间多态的效果。 但是,父类的引用只能访问子类重写的

  • 我有一个抽象类,割草机,它覆盖了toString()方法。草坪拖拉机类扩展了割草机。它覆盖了toString()方法,并调用super.toString()作为方法的第一行。然后我有一个商业类,它扩展了劳恩拖拉机并覆盖了toString(),也在第一行调用super.toString()。当实例化一个商业对象(声明为割草机对象)并调用它的toString()时,我希望它打印割草机和草坪拖拉机的两个