2016-12-04 2 views
0

Я использую NetBeans для создания некоторых настольных приложений с JTable-s и я столкнулся с неприятностью:Невозможно использовать общедоступные методы подклассов Java

я создаю подкласс JTable, предположит CustomJTable:

public class CustomJTable extends JTable { 

    private Object[][] someData; 

    public CustomJTable (Object[][] someData) { 
     this.someData = someData; 
    } 

    public doSomething() { 
     // do something 
    } 
} 

public class MyApp { 

    ... 
    public void someMethod (Object[][] someData) { 
     JTable table = new CustomJTable(someData); 
     table.doSomething(); // this method does not belong to JTable and  
           // is unusable to me in NetBeans 
    } 
    ... 
} 

NetBeans говорит, что метод doSomething не может быть найден в классе JTable. Ибо я даже не смущен. Спасибо, совет.

Это всего лишь сокращенный пример кода, чтобы показать источник проблем.

+0

Ваш тип переменной JTable. И такого метода в JTable нет. Измените его тип на CustomJTable. Тем не менее, подклассификация компонентов качания - это, как правило, плохая идея. –

+0

Метод doSomething отсутствует тип возврата, это синтаксическая ошибка и не будет компилироваться, вы имели в виду: public void doSomething() {} – AlexC

+0

Вместо 'JTable table = new ...' use 'CustomJTable table = new .. .' –

ответ

1

Вы создаете экземпляр JTable, а затем попытаетесь вызвать метод, принадлежащий CustomJTable.

Расширение JTable в CustomJTable не дает вам методов, принадлежащих CustomJTable.

Для того, чтобы вызвать метод экземпляр правильного объекта:

CustomJTable table = new CustomJTable(someData); 
0

Из-за время выполнения полиморфизма она будет решена во время выполнения. Вам нужно набрать бросок.

JTable table = new CustomJTable(someData); 
     ((CustomJTable) table).doSomething(); 
Смежные вопросы