【问题标题】:"Super" and "this" on DefaultTableModelDefaultTableModel 上的“Super”和“this”
【发布时间】:2013-09-10 04:08:07
【问题描述】:

我的类从 DefaultTableModel 扩展

我试试:

super.removeRow(...);

和

this.removeRow(...);

为什么它们都有效?

【问题讨论】:

  • @APoliteBoy 因为Your class 是DefaultTableModel
  • @一个有礼貌的男孩,请问是什么
  • 这是对象的工作方式,与defaulttablemodel 或swing 无关的是oop
  • @mKorbel 什么why.........?
  • 在这里搜索 AbstractTableModel,这里有一些最复杂的代码示例,您可以在 DeafultTableModel 中覆盖相同的方法,但是我错过了任何覆盖它的理由,因为这个方法在整体上是可访问的JVM 实例,DeafultTableModel 的优点是从当前 JVM 的任何角落调用任何东西,然后 this 或 super 内部类扩展 DefaultTableModel 是无用的字符,removeRow 将在没有这个或...的情况下执行,与 JButtons Action 等相同跨度>

标签: java swing jtable defaulttablemodel


【解决方案1】:

super 指的是超(父)类型的实现。

this 引用当前类型的实现,如果存在,则查找继承树,即。与super 相同。

根据您的类扩展 DefaultTableModel 的方式,它们可能会调用相同的方法。

【讨论】:

  • +1 这是正确答案.. 与挥杆无关的是 oop。
【解决方案2】:

不是答案,但this.whatever 在最复杂的 Swing GUI 中可能拼写错误

super.removeRow(...);

和

this.removeRow(...);

应该是(我的观点是避免......)

myTableModel.removeRow() - 例如((DefaultTableModel) table.getModel()).removeRow(row);

或者你在 XxxTableModel 中覆盖

public void removeRowAt(int row) {

【讨论】:

    【解决方案3】:

    实际上,他们在您的案例的父类中调用相同的方法,即removeRow。

    仅当您决定在子类中覆盖 removeRow 时,您才可以像这样调用 super.removeRow():

    @Override
    void removeRow() {
       // call parent class's removeRow
       super.removeRow()
       // rest of implementation
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2016-10-29
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-22
      • 2015-08-06
      相关资源
      最近更新 更多