1

クラスのオブジェクトを関数に渡してステートメントを出力しようとしているJavaコードがあります。以下はコードです:

import java.io.*;

class Abc
{

    public static void print(Object o)
    {
       o.name();
    }

    public static void main(String args[])
    {
       Vendor obj=new Vendor();
       print(obj);
    }
}

class Vendor
{
    public void name()
    {
       System.out.println("The name of the customer is chandeep");
    }

}

私が得ているエラーは、クラスAbcでシンボル名()が見つからないということです。適切なエラーであることは理解していますが、どうすれば解決できますか!?

4

3 に答える 3

6

Objectclass には のようなメソッドがなくname()、 type の参照で呼び出そうとしているため、機能しませんObject

Vendorパラメータとして参照を取るようにメソッドのシグネチャを変更するだけです: -

public static void print(Vendor vendor) {
     vendor.name();
}

メソッドname()Vendorクラス内にあり、の参照を渡しているため、メソッドで仮パラメーターとしてVendor使用する必要はありません。Object

于 2012-11-21T18:29:06.670 に答える
1

メソッドのパラメータがprint()タイプでObjectはなくタイプであるためVendorです。Objectしたがって、メソッドを持たないタイプのインスタンスが必要name()です。もちろん、実際のインスタンスは拡張されてメソッドのリストに追加されている可能性がありますObjectname()、コンパイラーはそれを知ることができません。

print()メソッドが。だけを受け入れるようにしたい場合はVendor、パラメータをからObjectに変更するだけVendorです。異なるオブジェクトを受け入れたい場合は、もう少し複雑なオブジェクト指向のアプローチが必要です。

于 2012-11-21T18:32:18.130 に答える
-2

o が Vendor であることがわかっている場合は、それを Vendor 型にキャストするか、パラメーターの型をメソッド定義のジェネリック Object ではなく Vendor になるように書き換えます。

于 2012-11-21T18:30:10.843 に答える