2016-09-02 15 views
-2

그래서 Java에 익숙하지 않습니다.인터페이스의 인스턴스를 반환하는 메서드를 선언하는 방법

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

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

문제는, 내가 점점 계속 오류 추상적 인 방법이있을 수 없다 : 난 그냥 인터페이스에 도입 있고 난 인터페이스 아래 Chassis

의 인스턴스를 반환하는 메서드를 작성해야하는 코드 시체 (blockquote로 표시) 아직 나는 추상적으로 내 방법을 선언하지 않았다.

무엇이 문제입니까?

+1

다른 메소드 내에서 메소드 선언이 있습니다. 각 메소드를 별도로 정의해야합니다. –

+0

정확히 어떻게 할 수 있습니까? getChassis 타입을 인터페이스 외부에 선언함으로써? –

+0

내 대답보기 ... –

답변

-1

이 코드는 전혀 작동하지 않습니다. main 메소드는 인터페이스가 아닌 클래스에만 유효합니다.

아래와 같이 수정 : 답변이 올바르지 않습니다. 그러나 메서드 내에서 메서드를 사용하는 것은 여전히 ​​작동하지 않습니다. 다른 답변을 참조하십시오.

+2

Java 8에서는 인터페이스에'main'을 추가 할 수 있지만 좋은 생각은 아닙니다. –

+0

인터페이스의 main public static void main? 정말?? –

+0

방금 ​​확인해 보았습니다. 예상대로 작동합니다. –

1

두 가지 문제가 있습니다. 다른 메소드 안에 메소드를 넣을 수 없으며 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이 public으로 정의되었으므로 main.java 클래스를 작성해야하는 오류가 발생합니다 –

+0

@MichaelM. 올바른 모든 공개 최상위 클래스는 자체 파일에 있어야합니다. 일반적인 Java 프로젝트에서는 수천 개에 달하는 파일을 가지고있을지라도 수백 개가 필요합니다. –

+1

@PeterLawrey :이 점이 더 혼란 스럽다는 것에 대해서는 동의 할 수 없습니다. –

0

같은 다른 클래스를 만드는 것이다 인터페이스는 추상의 일종이다. 그것은 인스턴스화 될 수 없으며, 정의가 아니라 메소드와 속성의 선언 만 가질 수 있습니다. 클래스에서 구현할 수있는 경우에만 인터페이스에서 선언 된 모든 메소드를 정의해야합니다. main 메소드는 프로그램을 실행하기 위해 정의 될 필요가있다. 따라서 인터페이스 내부에 배치하면 안됩니다. 다음과 같이 코드를 변경하십시오.

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

관련 문제