2

友人、私は Java に問題があります。1 つの構造を実装したいのですが、それを行うのが困難です。誰か助けてください。

interface samp1{
    method1()
    method2()
    method3()
}

interface samp2{
    method4()
    method5()
}
class Samp implements samp1,samp2
{
  // this class needs only method1 from interface samp1 and method 4 from interface samp2
  // I don't want to override all the methods from interface 
}

誰かがこれに対するいくつかの解決策を提案できますか?

これに利用できるデザインパターンはありますか?もしそうなら、参照へのリンクを提供してください。

前もって感謝します。

4

6 に答える 6

10

インターフェイスはコントラクトです。「私のクラスはこれらのメソッドをすべて実装しています」と表示されます。

参照: http://docs.oracle.com/javase/tutorial/java/concepts/interface.html

それを望まない場合は、インターフェイスを使用しないでください。

于 2013-01-19T18:37:08.263 に答える
2

Java 8 では、インターフェイスの実装時に特定のメソッドがオーバーライドされない場合に使用される、インターフェイスのデフォルト メソッドを使用できます。例えば:

interface MyInterface{
    //if a default method is not provided, you have to override it 
    public int Method1(); 
    public default int Method2(){
        return 2;
    }
}

public class MyClass{
    public static void main(String args[]){
        MyInterface in = new MyInterface(){
            public int Method1(){
                return 0;
            }
        };
        //uses the implemented method
        System.out.println(in.Method1()); //prints 0
        //uses the default method
        System.out.println(in.Method2()); // prints 2
    }
}
于 2017-01-03T16:22:55.243 に答える
1

インターフェースを実装するときは、インターフェース内のすべてのメソッドを実装する以外に方法はありません。上記のクラス「samp」では、「samp1」および「samp2」インターフェースを実装しているため、samp1 および samp2 のすべてのメソッドを samp クラスに実装する必要があります。

インターフェイスからメソッドをオーバーライドすると言いました。インターフェイスからメソッドをオーバーライドするのではなく、メソッドを実装するだけです。

抽象クラスを使用して問題を解決できます。

abstract class AbstractSamp implement samp1,samp2{

 method1(){...}
 method4(){...}
}

以下のように、samp クラスで Abstractsamp を拡張できます。

class samp extends AbstractSamp{

// here you can extend method1() and method4() by inheritence and you can also    override   them as you want

}
于 2013-01-19T19:02:54.617 に答える
0
interface MySpecializedInterface{
   public void method1();
   public void method4();
}

class YourClass implements MySpecializedInterface{

  // now you can implement method1 and method4... :|
}
于 2013-01-19T18:40:25.987 に答える
0

あなたが達成しようとしていることについてこれ以上の文脈がなくても、これは私がすることを提案するものです:

interface BaseSamp {
    void method1();
    void method4();
}

interface Samp1 extends BaseSamp {
     void method2();
     void method3();
}

interface Samp2 extends BaseSamp {
    void method5();
}

class YourClass implements BaseSamp {
 ....
}
于 2013-01-19T18:36:30.527 に答える
0

クラスを として宣言するabstractと、すべてのメソッドを実装する必要がなくなります。ただし、抽象クラスはインスタンス化できないことに注意してください。

于 2013-01-19T18:34:44.470 に答える