4

抽象メソッドの入力パラメーターとしてオブジェクトがなくても、このコードを機能させることができます。たとえば、printInformation()メソッドの入力パラメーターを直接作成し、それが機能するようにempを作成しprintInformation(int x)たとします。

以下に示すように、入力パラメーターをprintInformation()メソッドのオブジェクトとして作成すると、エラーが発生します。

empは抽象ではなく、personクラスの抽象メソッドprintInformation(person)をオーバーライドしませんemp extends person {^

abstract class person{
 abstract void printInformation(person p);
}

class emp extends person{
 emp(){
  System.out.println("This is a emp constructor");
 }
 void printInformation(emp e){
  System.out.println("This is an emp");
 }
}

class entity{
 public static void main(String args[]){
  emp employeeObject = new emp();
  employeeObject.printInformation(employeeObject);
 }
}
4

2 に答える 2

4

インターフェイスには、次のように定義された関数があります。

void printInformation(person p);

クラスには、次のように定義された関数があります。

void printInformation(emp e);

それらは同じ機能ではありません。Javaは、2番目のメソッドを、インターフェースからのメソッドの実装ではなく、新しいオーバーロードされたメソッドと見なします。クラスempはabstractとして宣言されていませんが、abstractメソッドの実装を提供していないため、エラーvoid printInformation(person)が発生します。

于 2012-07-20T02:21:44.167 に答える
3

私はこのようなことをしているでしょう:

interface PrintsInformation<T> {
    void printInformation( T t );
}

class Emp implements PrintsInformation<Emp> {
    public void printInformation( Emp e ) {
        System.out.println( "This is an emp" );
    }
}

public static void main( String[] args ) {
    Emp employeeObject = new Emp();
    employeeObject.printInformation( employeeObject ); // compiles
}

問題を解決するもう 1 つの方法は、オブジェクト自体が印刷されている場合はオブジェクトを渡さないことです。
これを行うだけです:

    public void printInformation() {
        // print "this" object, rather than the one passed in
        System.out.println( "This is an emp" );
    }
于 2012-07-20T02:28:33.400 に答える