1

私は13歳で、Javaは初めてです。私が理解できないように見えるのは、参照であるため、インターフェースからクラスにオーバーライドメソッドを実装しない方法です。新しいコピーを作成したくありません。また、拡張 (インターフェイスがメソッドの一部を取得するクラス) を作成 (ここにクラスを挿入) することもできません。だから私はそれを実装し、何が得られますか?

err: The type Threadmanager must implement the inherited abstract method (the method)

次に、リストがあり、そのうちの1つに「継承されていないメソッドを実装する」と書かれています。

しかし、私はメソッドを実装したくありません! 使いたい!

Threadmanager tm;
AwtUtils manager = tm;
manager.drawImage(/*params*/)

上記は私が望むものであり、以下は私が望まないものです:

@override
public void drawImage(/*params*/){
...
}

インターフェイスのメソッドを再定義したくありません。単にそれらを使用するだけです。そして、すでに何かを拡張しているため、クラス ThreadManager extends Debugger(.java) を持つことはできません。インターフェイスは、「class foo extends bar」を介して継承せずに、別のクラスでこれらのメソッドを使用できる方法だと思いました

ちなみに、インターフェイスで参照されているすべてのメソッドは、デバッガーとゲーム ライブラリを兼ねる私のクラス Debugger.java のメソッドへの参照です。

4

3 に答える 3

2

インターフェイスからメソッドを使用することはできません。インターフェースにはコードがなく、定義だけがあります。それを実装するクラスが満たす必要がある機能契約と考えてください。

例えば

public interface Example {
    public void method1ToImplement();
    public int method2ToImplement(final String input);
}

これは、このインターフェースを実装するすべてのクラスが満たさなければならない契約です。これは、およびimplements Exampleを実装する必要があるインスタンス化可能なクラスを意味します。これは、このクラスがこの機能を満たしていると述べているためです。インターフェイスにコードが含まれていないため、現時点ではクラスにこの機能のコードがないため、この機能を実装する必要があります。たとえば、 のメソッドを使用することはできません。実際、これはインターフェイスであるため、新しい を作成することさえできません。ただし、インターフェイスを実装する非抽象クラスであるため、そのメソッドを作成して使用することはできます。public void method1ToImplement()public int method2ToImplement(String)ListListArrayListList

toString()たとえば、既に実装されているメソッド(すべてのクラスで既に実装されている)を使用できる場所をどこかで見たので、混乱しているかもしれません。これは、このメソッドがインターフェイスではなく、親クラスによって定義されているためです (toString()それを実装するオブジェクトの場合)。

TL;DR: インターフェースを実装するクラスは、抽象でない限り、そのメソッドを実装する必要があります。

于 2013-11-03T21:07:07.660 に答える
1

インターフェイスの機能について混乱していると思います。インターフェイスは、インターフェイスを実装するすべてのオブジェクトがインターフェイス内のメソッドを定義する必要があるようなコントラクトを定義するだけです。抽象クラスがある場合は、抽象クラスを拡張するすべてのクラスに対して、そのクラスの抽象メソッドを実装する必要があります。これに対する唯一の例外はextend、抽象メソッドまたはインターフェースを既に実装しているクラスから、サブクラス用にそれらを再定義したくない/必要としない場合です。

メソッドを実装したくない、ただ使いたいだけだと言いますが、存在しないメソッドは使えません。インターフェイスの実装は、インターフェイスのメソッドのロジックを魔法のように定義するわけではありません。それはあなたの仕事です。繰り返しになりますが、インターフェイスを実装するすべてのオブジェクトにインターフェイスのメソッドが定義されることを単に示しています。

インターフェイスの優れた点の 1 つは、次のとおりです。すべてが特定のインターフェイスを実装するオブジェクトのコレクションがあると仮定すると、これらすべてのオブジェクトのインターフェイスから任意のメソッドを呼び出すことができます。注意: 配列、ArrayList、または型パラメーターとしてインターフェイスを取るものを使用することで、上記のオブジェクトをグループ化できます。ArrayList<MyInterface>

より具体的な例:
area メソッドのヘッダーのみを含む Shape インターフェースを考えてみましょう。Shape インターフェイスを実装するさまざまなタイプの形状 (円、正方形など) を多数持つことができます。各形状クラスで、その形状の面積を取得するメソッドを定義します。があれば、ArrayList<Shape> shapes =...さまざまなタイプの形状をそのリストに入れ、次の操作を実行できます。

for (Shape s : shapes)
{
     System.out.println(s.area());
}
于 2013-11-03T21:10:01.930 に答える
1

私があなたを正しく理解していれば、クラスにインターフェースを実装したいが、そのメソッドを実装しないでください。もしそうなら、あなたはできません。抽象クラスを作成する場合を除き、インターフェイス メソッドの実装は必須です。

あなたの質問には何かが欠けていると思いますので、より良い回答を提供できるように、あなたのInterfaceとのコードを提供してください。Class

于 2013-11-03T21:06:30.983 に答える