私はインターフェイスと3つのクラスを持っています。クラスB
では、printHello
というメソッドを定義します。次に、クラスTest
では、新しいIHello
オブジェクトが宣言され、新しいBに割り当てられます。インターフェイスで定義されていないメソッドを使用できないのはなぜですか?
「メソッドprintHello()は型が定義されていません」というエラーが表示されるため、コードがコンパイルされません。 IHello "私が混乱しているのは、タイプIHello
のオブジェクトを新しいB
に割り当てることができるからです。したがって、そのオブジェクトにはインターフェイスがない場合でもB
のメソッドを使用できるはずはありませんか?
この問題を解決するには、というメソッドをIHello
インターフェイスに宣言するか、代わりにタイプBのオブジェクトを宣言することができます。問題を解決するために他に何かできることはありますか?
インタフェースIHello
public interface IHello {
void hello();
}
クラス
public class A implements IHello{
public void hello(){
System.out.println("hello");
}
}
クラスB
public class B extends A {
public void printHello(){
this.hello();
}
}
クラスTest
public class Test {
public static IHello b;
public static void main(String[] args) {
b = new B();
b.printHello(); //The method printHello() is undefined for type IHello
}
}
***変数***の*タイプ*(*オブジェクト*ではない)とは何ですか?これはコンパイラが見るものです。これは途方もない時間にここで尋ねられてきました。 –
変数の型はIHelloですが、 'B'に代入されているので、' B'のメソッドを使用できない理由を理解しようとしています。 –
コンパイラは実際のオブジェクトタイプを見ていません。あなたが宣言したタイプ、IHelloを見ています。場合によっては、実行時にしか利用できない可能性があるため、コンパイラは実際のオブジェクト型を認識しない*かもしれません。 –