2015-08-27 3 views
0

Приветствую, что я изучаю Java из основ ..ошибка в интерфейсе реализации в основном классе

У меня есть некоторые сомнения в реализации интерфейса.

РАБОЧИЙ КОД

Использование интерфейса в классе работает ....

interface bala 
    { 

    void prnt(); 
    } 

class ex implements bala{ 
    @Override 
    public void prnt() { 
     System.out.print("hi"); 
    } 
} 

public class Solution 
{ 
    public static void main(String arg[]) 
    { 
    ex p = new ex(); 
    p.prnt(); 
    } 
} 

НЕ РАБОТАЕТ

Вот мои сомнения, почему я не могу реализовать интерфейс в основной метод? заявление

interface bala 
    { 
    void prnt(); 
    } 

    public class Solution implements bala 
    { 
     public static void main(String arg[]) 
    { 
     prnt(); 
    } 

@Override 
public void prnt() { 
    System.out.println("hi"); 

    } 
} 

Что здесь происходит? Почему внедрение на main() не работает? Есть ли способ сделать рабочий интерфейс главной функцией?

+2

Это не работает, потому что вы не можете вызвать нестатические методы в статическом контексте. – BackSlash

+0

Скопируйте ошибку, которую вы получаете от компилятора, вставьте ее в поиск Google и прочитайте. –

ответ

3

Это не работает, потому что вы пытаетесь получить доступ к нестационарному (то есть экземпляру) методу из статического контекста.

Для того, чтобы вызвать его, вам нужен экземпляр Solution класса (обратите внимание, что в рабочем коде у вас есть экземпляр ex класса, так что здесь вы должны сделать то же самое с небольшой разницей):

Solution instance = new Solution(); 
instance.prnt(); 
2

Проблема main() является статической, статические блоки могут обращаться к статическим членам или с ссылкой на объект. Так что здесь можно было бы просто создать объект/экземпляр для вызова метода:

new Solution().prnt(); 
2

попробовать new Solution().prnt() вместо вызова prnt()

проблемы является:

enter image description here

1

Основной метод является статическим метод. И ваш переопределенный метод нестационар. Вы не можете вызывать нестатические методы из статического контекста.

Для того, чтобы вызвать перекрытый метод PRNT() для вызова, необходимо создать экземпляр вам класс решения, как -

Solution sol = new Solution(); 

, а затем

sol.prnt(); 
4
Given Bellow code works well.  
    interface bala 
    { 
void prnt(); 

}

public class Solution implements bala 
{ 
    public static void main(String arg[]) 
{ 
    Solution sol = new Solution(); 
    sol.prnt(); 
} 


public void prnt() { 
System.out.println("hi"); 

} 
} 
1

Лучший вариант для этого. Создайте экземпляр class и получите доступ к нему.поскольку основной method статический метод, который вы можете сделать так

Solution instance = new Solution();//Creating instance of class 
instance.prnt();//access prnt . 
0

Вы должны создать объект класса Solution в основном методе

Solution s1 = new Solution(); 
s1.print(); 

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

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