2016-09-02 10 views
-2

私はJavaに少し慣れています。インタフェースのインスタンスを返すメソッドを宣言する方法

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

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

問題がある、私は抽象メソッドを持つことができないということになっ誤差を保つ:私はちょうど以下Chassis

がコードでインターフェイスに導入され、私はインターフェイスのインスタンスを返すメソッドを作成する必要がありましたボディ(ブロッククォートで示されている)がまだ私の抽象メソッドとして宣言していなかった。

どのような問題があるようですか?

+1

別のメソッドの中にメソッド宣言があります。それぞれのメソッドを別々に定義する必要があります。 –

+0

私はそれをどうやって行うことができますか?インタフェースの外でgetChassis型を宣言することによって? –

+0

私の答えを参照してください。 –

答えて

-1

このコードはまったく機能しません。 mainメソッドはクラスに対してのみ有効であり、インタフェースに対しては有効ではありません。

EDIT:以下のように答えは正しくありません。しかし、メソッド内にメソッドを持つことは、まだ動作しません。他の答えを見てください。

+2

Java 8では、インターフェースに 'main'を追加できますが、それは良い考えではないと思います。 –

+0

インターフェイスのmain public static void main?本当に?? –

+0

私はちょうどそれをチェックしようとしましたが、期待どおりに動作します –

1

2つの問題があります。メソッドを別のメソッドの中に置くことはできず、このようなメソッドを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

このように定義すると、メインがpublic –

+0

@MichaelMとして定義されているため、main.javaクラスを作成する必要があるエラーが発生します。正解、すべてのパブリックトップレベルのクラスは、独自のファイル内にある必要があります。通常の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

関連する問題