1

私のクラスは DefaultTableModel から拡張されました

私は試します:

super.removeRow(...);

this.removeRow(...);

なぜ両方とも機能するのですか?

4

3 に答える 3

5

superスーパー (親) タイプの実装を参照します。

this存在する場合は現在の型の実装を参照し、存在しない場合は継承ツリーを検索します。と同じsuperです。

クラスの拡張方法によってはDefaultTableModel、同じメソッドを呼び出している可能性があります。

于 2013-09-09T20:01:20.837 に答える
3

答えではありませんがthis.whatever、ほとんどの複雑な Swing GUI では綴りがかなり間違っている可能性があります

super.removeRow(...);

this.removeRow(...);

あるべきです(避けるべき私の見解....)

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

または XxxTableModel でオーバーライドします

public void removeRowAt(int row) {

于 2013-09-09T20:08:07.360 に答える
1

実際には、同じメソッド、つまりremoveRowあなたのケースの親クラスで呼び出しています。

子クラスでオーバーライドすることにした場合にのみ、次のremoveRowように呼び出すことができますsuper.removeRow()

@Override
void removeRow() {
   // call parent class's removeRow
   super.removeRow()
   // rest of implementation
}
于 2013-09-09T20:01:42.927 に答える