私はこのコードを、開発を中止して以来、プロジェクト用になっていた小片のフォルダに入れました。しかし、Javaの初心者は、私が持っているいくつかの質問があります(私はコードがコンパイルされていないことを認識していますが、それは私の質問の1つになります)。クラスの継承とキャスト
interface Executable {
public int execute (Object o);
}
public class Biv implements Executable {
public int execute (String s) {
System.out.println (s);
return s.length();
}
public static void main (String[] args) {
Executable e = new Biv();
System.out.println(
e.execute ("Hello World!"));
}
}
1)私の最初の質問は変数eに行うことです。これはExecutableオブジェクト型で宣言されていますが、新しいBivオブジェクトでインスタンス化できる理由はわかりません。何が起こっているのか、それはどういう意味ですか?
2)エラーはBivクラス内のexecuteメソッドにあります。これは、文字列ではなくオブジェクトを期待するためです。しかし、StringはObjectのサブクラスなので、ObjectをStringに置き換えることはできませんか? StringをObjectに置き換えた場合、エラーが発生する(私は思うが)現在どのように処理されているのか理解できない。
署名が必ずしも同一である必要はありません。パラメータタイプは「緩められる」ことがあります。たとえば、インタフェースのメソッドが 'String'を受け取った場合、' Biv'のメソッドに 'Object'を渡すことができます。 – Maxpm
@Maxpm:それは当てはまりません。 – Natix
@natix私は訂正しました。 – Maxpm