2015-11-16 3 views
0

У меня есть два класса и интерфейс. Я создал методы в интерфейсе и переопределял их в классе, реализующем интерфейс. Теперь я пытаюсь импортировать эти методы в другой класс. По какой-то причине методы не найдены. Очень сложно, потому что я не знаю почему. Интерфейс, переопределяющий класс и класс, который импортирует методы, находится ниже в этом точном порядке. Почему они не могут импортировать ?:Импорт методов переопределенного интерфейса

public interface SortInterface { 

    public abstract void recursiveSort(int[] list); 

    public abstract void iterativeSort(int[] list); 

    int getCount(); 

    long getTime(); 

} 

первостепенную класс:

public class YourSort implements SortInterface{ 
     @Override 
    public void iterativeSort(int[] list) { 
     for(int i =1; i< list.length; i++){ 
     int temp = list[i]; 
     int j; 
     for (j = i-1; j>=0 && temp < list[j]; j--) 
      list[j+1] = list[j]; 
     list[j+1] = temp; 
    }} 

    public static void recursiveSort(int array[], int n, int j) { 
if (j < n) { 
    int i; 
    int temp = array[j]; 

    for (i=j; i > 0 && array[i-1] > temp; i--) array[i] = array[i-1]; 
    array[i] = temp; 

    recursiveSort(array,n, j+1); }} 


    @Override 
    public void recursiveSort(int[] list) { 
     int j = list.length; 
     int n=0; 
     if (j < n) { 
     int i; 
     int temp = list[j]; 

     for (i=j; i > 0 && list[i-1] > temp; i--) list[i] = list[i-1]; 
     list[i] = temp; 

     recursiveSort(list,n, j+1); } 
    } 



    @Override 
    public int getCount() { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 

    @Override 
    public long getTime() { 
     throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
    } 
} 

импорта класса:

public class SortMain { 
static int[] b; 
static int[] c; 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     b = new int[5]; 
     b[0]= 8; 
     b[1]=5; 
     b[2]=9; 
     b[3]=4; 
     b[4]=2; 
     recursiveSort(b); 

     c = new int[5]; 
     c[0]= 8; 
     c[1]=5; 
     c[2]=9; 
     c[3]=4; 
     c[4]=2; 
     recursiveSort(b); 

     for(int i = 0; i<5; i++){ 
      System.out.println(b[i]); 
     } 

     iterativeSort(c); 
     System.out.println(""); 

     for(int i = 0; i<5; i++){ 
      System.out.println(c[i]); 
     } 
    } 
} 
+0

Как вы думаете, 'рекурсивныйСорт (б),' должен делать? Почему вы думаете? –

+0

recursiveSort (b) - это метод, реализующий рекурсивный вид. – jillian

+0

Нет, это не то, что я имею в виду. Как вы думаете, что вы должны делать, и почему вы так думаете? Это вызов метода? Статический метод или метод экземпляра? Если это статический метод, к какому классу он принадлежит? Как компилятор знает? Если это метод экземпляра, какой экземпляр? Как компилятор знает? –

ответ

0

Все методы на интерфейсе являются public abstract неявно. До Java 8 вы могли бы сделать что-нибудь еще с помощью метода.

Все методы интерфейса (до Java 8) были экземпляром методов, как вы их написали. Это означает, что они должны работать над экземпляром интерфейса.

Примечание: способ, которым вы написали методы, им действительно не нужен экземпляр и, вероятно, должен быть на interface вообще. Вы могли бы сделать их static методами, но лучшей альтернативой является переход их в класс полезности и import static их там от SortMain.

Для минимум изменений вы можете написать

new YourSort().recursiveSort(b); 

В то время как это будет работать, это ужасно по ряду причин, не в последнюю очередь потому, что объект YourSort не имеет смысла, и требуется только, чтобы получить код для компиляции.

Смежные вопросы