2

だから私はJavaで抽象クラスを勉強していて、他の人のコードを読んでいたとき、私は次のことを見ました:

public abstract class Message implements Serializable, Comparable<Message> {
    //stuff in this class
}

同じプロジェクトの別のクラスで、プログラマーは次のようにメソッドを宣言しました。

public void notifyMessage(Message msg, HostType sourceType) {
    //some stuff in this method
}

notifyMessage宣言で、変数msgのタイプが「Message」であることに注意してください。すべての抽象クラスをインスタンス化できないと思いましたか?では、「メッセージメッセージ」を宣言するとはどういう意味ですか?誰かがこれが私にとって何を意味するのか説明できますか?前もって感謝します

4

2 に答える 2

6

つまり、メッセージタイプ(子供)のオブジェクトを受け取ることができるということです。

public class Letter extends Message ...

notifyMessageの引数としてLetterオブジェクトを送信できます

このようなことが可能である可能性があります:

someObject.notifyMessage(  new Letter() , ... )

java.awt.Componentは抽象ですJPanelはContainerを継承します(実際にはJComponentが最初です)Container have add(Component c)

つまり、JButton、JLabelなどの任意のコンポーネントを追加できます。

http://docs.oracle.com/javase/1.4.2/docs/api/java/awt/Container.html#add(java.awt.Component)http://docs.oracle.com/javase/1.4 。 2 / docs / api / java / awt / Component.html

抽象メソッドとそのオブジェクトの本体を定義する場合は、抽象クラスのオブジェクトを作成することもできます。

    Message m = new Message() {
        //if no abstract method, then this is empty
    };
于 2012-05-19T23:40:29.973 に答える
1

基本的に、msgの実際のクラスはメッセージ型の派生クラスですが、その参照型はメッセージの型です。つまり、多態性です。これは、メッセージに複数のサブクラスがあるが、メソッドでどのサブクラスが参照されるかが不明な場合に使用されます。このためのコードは

メッセージmsg=new SubclassOfMessage()

ただし、新しいMessageオブジェクトを作成することはできません。

于 2012-05-19T23:45:19.757 に答える