-6

System.out.print(); のショートカットとして機能するインターフェイスを作成しようとしています。しかし、コンパイルするabstract methods do not specify a bodyと、これが何を意味するのかわかりません

public interface Printing{   
    public  abstract void prt(String print,boolean line){ 
        if(line=true) {   
            System.out.println(print);
        }       
    }   

    public abstract void prt(String print){          
        System.out.print(print);       
    } 
}
4

7 に答える 7

1

インターフェイスはコントラクトです。実装するメソッドを指定するだけです。抽象メソッドには本体は含まれず、署名のみが含まれます。

于 2013-06-13T15:38:01.233 に答える
0

これをインターフェイスではなく抽象クラスにします。

インターフェイスには、メソッドの実装がまったくない場合があります。だからあなたが持つことができる唯一のものはです。

void prt(String print,boolean line);
void prt(String print);
于 2013-06-13T15:37:58.337 に答える
0

インターフェイスは空のシェルのようなもので、メンバーは実装されていません。

コードを次のように変更するために必要なものは次のとおりです。

void prt(String print,boolean line);

void prt(String print);

http://docs.oracle.com/javase/tutorial/java/concepts/interface.html http://csis.pace.edu/~bergin/papers/Interface.html

于 2013-06-13T15:44:59.693 に答える
0

抽象メソッドにボディを指定することはできません。抽象メソッドは不完全であることを意味します。

インターフェイスと抽象クラスについてもっと理解する必要があると思います。

Java やその他のオブジェクト指向プログラミング言語でインターフェイス抽象クラスが何を意味するかを理解するには、まず継承を理解する必要があります。

継承

車とバスを考えてみましょう。それらは2つの異なる車両です。それでも、ステアリング、ブレーキ、ギア、エンジンなど、いくつかの共通のプロパティを共有しています。

したがって、継承の概念を使用すると、これは次のように表すことができます..

public class Vehicle {

    public Driver driver;
    public Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
    //You can define as many properties as you want here..
}

今は自転車..

public class Bicycle extends Vehicle {

    //You define properties which are unique to bicycles here..
    public Pedal pedal;

}

そして車..

public class Car extends Vehicle {

    public Engine engine;
    public Door[] doors;
}

継承については以上です。上で見たように、それらを使用して、オブジェクトをより単純な基本フォームとその子に分類します。

抽象クラス

抽象クラスは不完全なオブジェクトです。さらに理解を深めるために、車両のアナロジーをもう一度考えてみましょう。
車両を運転することができます。右?しかし、乗り物によって運転方法は異なります。たとえば、自転車を運転するように車を運転することはできません。
では、車両の駆動機能をどのように表現するのでしょうか? 車の種類を確認して、独自の機能で運転するのは難しいです。新しいタイプの車両を追加するときは、ドライバー クラスを何度も変更する必要があります。
ここに、抽象クラスとメソッドの役割があります。drive メソッドを抽象として定義して、継承するすべての子がこの関数を実装する必要があることを伝えることができます。
したがって、車両クラスを変更すると..

//......Code of Vehicle Class
abstract public void Drive();
//.....Code continues

自転車と車は、運転方法も指定する必要があります。そうしないと、コードがコンパイルされず、エラーがスローされます。

要するに..抽象クラスは、いくつかの不完全な関数を持つ部分的に不完全なクラスであり、継承する子が独自に指定する必要があります。

インターフェース

インターフェイスは完全に不完全です。プロパティはありません。それらは、継承する子が何かを実行できることを示しているだけです..

さまざまな種類の携帯電話を持っているとします。それぞれに、さまざまな機能を実行するさまざまな方法があります。例:人に電話する。電話のメーカーは、それを行う方法を指定します。ここで、携帯電話は番号をダイヤルできます。つまり、ダイヤル可能です。これをインターフェースとして表現しましょう。

public interface Dialable {
    public void Dial(Number n);
}

ここで Dialable のメーカーは、番号のダイヤル方法を定義します。ダイヤルする番号を指定するだけです。

Dialable myPhone1 = new Dialable() {
    public void Dial(Number n) {
        //Do the phone1's own way to dial a number
    }
}

Dialable myPhone2 = new Dialable() {
    public void Dial(Number n) {
        //Do the phone2's own way to dial a number
    }
}

ここでは、抽象クラスの代わりにインターフェイスを使用することで、そのプロパティについて心配する必要はありません。例: タッチ スクリーンまたはダイヤル パッドはありますか、固定電話または携帯電話ですか。ダイヤル可能かどうかを知る必要があるだけです。Dialable インターフェイスを継承 (または実装) しますか。

インターフェイスは、オブジェクト間の相互運用性を確保するために開発者によって一般的に使用されますが、それらが共通の機能を共有している場合に限ります (番号をダイヤルする必要がある限り、固定電話や携帯電話に変更する場合と同様)。要するに、インターフェイスは、プロパティを持たない、抽象クラスのより単純なバージョンです。

また、必要な数のインターフェイスを実装 (継承) できますが、拡張 (継承) できるのは 1 つの親クラスのみであることに注意してください。

より詳しい情報

抽象クラス vs インターフェース
Stackoverflow の別の同様の質問

于 2013-06-13T17:29:39.523 に答える
0

System.out.println() メソッドにショートカットを追加するだけの場合は
、abstract キーワードを追加する必要はありません。また、インターフェイスをクラスに変更します。

public class Printing{   
    public void prt(String print,boolean line){ 
        if(line=true) {   
            System.out.println(print);
        } else {
            System.out.print(print);
        }       
    }   

    public void prt(String print){          
        System.out.print(print);       
    } 
}

ただし、ここでは最初に印刷オブジェクトのインスタンスを作成する必要があります。と同じように:

Printing p = new Printing();
//Now you may call the functions on p.
p.prt("Without Line Terminator");
p.prt("Also Without Line Terminator",false);
p.prt("With Line Terminator",true);

インスタンス化せずに関数を呼び出す必要がある場合は、Printing.prt("sample")代わりにPrinting p = new Printing(); p.prt("sample")

prt() メソッドを static として定義する必要があります。

public class Printing{   
    public static void prt(String print,boolean line){ 
        if(line=true) {   
            System.out.println(print);
        } else {
            System.out.print(print);
        }       
    }   

    public static void prt(String print){          
        System.out.print(print);       
    }     
}

今電話..

//You may call the functions on Printing itself.
Printing.prt("Without Line Terminator");
Printing.prt("Also Without Line Terminator",false);
Printing.prt("With Line Terminator",true);

詳細
静的メソッド
静的クラスに関する Oracle Javadoc

于 2013-06-13T17:45:06.410 に答える