Супер и это на DefaultTableModel

Мой класс расширен из DefaultTableModel

Я пытаюсь:

super.removeRow(...);

И

this.removeRow(...);

Почему они оба работают?


person Sajad    schedule 09.09.2013    source источник
comment
@APoliteBoy, потому что Your class это DefaultTableModel   -  person nachokk    schedule 10.09.2013
comment
@Вежливый мальчик, пожалуйста, что к чему   -  person mKorbel    schedule 10.09.2013
comment
так работают объекты, не имеет ничего общего с defaulttablemodel или swing это oop   -  person nachokk    schedule 10.09.2013
comment
@mKorbel Что why......... ?   -  person Sajad    schedule 10.09.2013
comment
поищите здесь AbstractTableModel, вот несколько наиболее сложных примеров кода, те же методы, которые вы можете переопределить в DeafultTableModel, но тогда я упускаю любую причину переопределить это, потому что этот метод доступен во всем экземпляре JVM, а преимущество DeafultTableModel заключается вызовите что угодно из любых углов текущей JVM, тогда этот или супервнутренний класс расширяет DefaultTableModel - бесполезные символы, removeRow будет выполняться без этого или..., так же, как из действия JButtons и т. д.   -  person mKorbel    schedule 10.09.2013


Ответы (3)


не ответ, но this.whatever может быть написан с ошибкой в ​​​​самом сложном графическом интерфейсе Swing

super.removeRow(...);

И

this.removeRow(...);

должно быть (моя точка зрения, чтобы избежать ....)

myTableModel.removeRow() - e.g. ((DefaultTableModel) table.getModel()).removeRow(row);

или вы переопределяете в XxxTableModel

public void removeRowAt(int row) {

person mKorbel    schedule 09.09.2013

super относится к реализации супер (родительского) типа.

this ссылается на реализацию текущего типа, если она существует, в противном случае ищет дерево наследования, т.е. делает то же самое, что и super.

В зависимости от того, как ваш класс расширяет DefaultTableModel, они могут вызывать один и тот же метод.

person Sotirios Delimanolis    schedule 09.09.2013
comment
+1 это правильный ответ .. не имеет ничего общего со свингом, это ой. - person nachokk; 10.09.2013

На самом деле они вызывают один и тот же метод, т.е. removeRow в родительском классе для вашего случая.

Только в случае, когда вы решите переопределить removeRow в своем дочернем классе, вы можете сделать вызов super.removeRow() следующим образом:

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