2016-09-02 3 views
-2

Так что я немного новичок в Java. Я только что представил интерфейсы и я должен создать метод, который возвращает экземпляр интерфейса ChassisКак объявить метод, возвращающий экземпляр интерфейса

Ниже приведен код:

public interface Chassis { 
    public String Chassis = "Chassis"; 

    public static void main(String[] args) { 
     public String getChassisType() { 
      return Chassis; 
     }  

Проблема заключается в том, я получаю ошибку, что абстрактные методы не могут иметь тело (как указано в blockquote), но я не объявлял свой метод абстрактным.

В чем проблема?

+1

У вас есть декларация метода внутри другого метода. Вы должны определить каждый метод отдельно. –

+0

как именно я могу это сделать? объявив тип getChassis вне интерфейса? –

+0

См. Мой ответ .. –

ответ

-1

Этот код не работает вообще. Основной метод действителен только для классов, а не для интерфейсов.

EDIT: как указано ниже ответ неправильный. Но метод внутри метода все еще не работает. См. Другие ответы.

+2

В Java 8 вы можете добавить 'main' в интерфейс, но я не думаю, что это хорошая идея. –

+0

Главный публичный статический void main в интерфейсе? В самом деле?? –

+0

Я просто попробовал просто проверить, и он работает так, как вы могли ожидать. O_O –

1

У вас есть две проблемы. Вы не можете поместить метод внутри другого метода, и вы не можете определить такой метод в интерфейсе на Java. В Java 8 вы можете сделать это

public interface Chassis { 

    String Chassis = "Chassis"; 

    default String getChassisType(){ 
     return Chassis; 
    } 
} 

Я бы не определить ваш public static void main внутри интерфейса. Хотя сейчас это разрешено, большинство разработчиков считают это запутанным. См. Ответ @ Jürgen, так как это, как мне кажется, наиболее опытные разработчики.

Я хотел бы создать еще один класс, как

public class Main { 
    public static void main(String... args) { 
     // an anonymous subclass so you have something to create/call. 
     System.out.println(new Chassis(){}.getChassisType()); 
    } 
} 
+0

Определение этого типа создает ошибку, которая требует от меня создания класса main.java, потому что main был определен как public –

+0

@MichaelM. Правильно, все общедоступные классы верхнего уровня должны быть в собственном файле. В обычном Java-проекте у вас будут сотни, если не тысячи файлов. –

+1

@PeterLawrey: Не могу согласиться с тем, что это сбивает с толку. –

0

интерфейс является своего рода абстрактным. Он не может быть создан, он может иметь только объявление методов и атрибутов, а не определение. Его можно реализовать только в классе, если вы делаете это в классе, вы должны определить все методы, объявленные в интерфейсе. Для выполнения программы необходимо определить основной метод. Поэтому его нельзя размещать внутри интерфейса. измените свой код следующим образом:

public interface chassis 
{ 
String Chassis; 
public String chassis(); 
} 
public class example implements chassis 
{ 
public String chassis() 
{ 
Chassis="chassis"; 
return Chassis; 
} 
public static void main(String[] args) 
{ 
System.out.println(new example().getChassisType()); 
} 
} 
+0

Я изменил его @BrandonIbbotson – dharan

+0

Это лучше, 1-я космос все еще раздражает меня, хотя. – byxor

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