1

継承について学んでいますが、多重継承の部分がよくわかりません。

これは私の質問です:

3 つのクラス名を作成する場合:

クラスA

クラスB

クラスC

クラスAがクラスCから継承することは可能ですか?また、クラスCからのクラスBの継承は、 1つのクラスCからの2つのクラス(A、B)の継承がJavaで許可されているため、多重継承を行いませんか?

基本的に、これは私の質問です: クラスから一度だけ継承することは可能ですか?つまり、同じクラスから継承する2つの異なるクラスが存在することはできませんか?

ありがとうございました。

4

9 に答える 9

2

最後から 2 番目の段落で説明したこと

クラスAがクラスCから継承することは可能ですか?また、クラスCからのクラスBの継承は、1つのクラスCからの2つのクラス(A、B)の継承がJavaで許可されているため、多重継承を行いませんか?

「多重継承」とは呼ばず、単に 2 つのサブクラスを持つだけClass Cです。他の回答がすでに述べているように、多重継承の概念は、1 つのクラスが 2 つ以上のクラスを拡張する場合です。したがって、実際には、たとえば などを意味する場合がありclass A extends B, Cます。Java などのほとんどのオブジェクト指向言語では、これは不可能です。C++ などの一部の言語では、これが可能です。

于 2013-10-11T12:14:16.393 に答える
2

これは、あなたが説明する多重継承ではありません。これは逆多重継承と言えます。多重継承とは、 と の両方から機能を継承するなど、クラスを意味しAます。BC

親クラスから継承するクラスを 1 つだけ許可する理由がわかりません。キーワードを使用しfinalて、子クラスを派生できないことを示すことができます。

于 2013-10-11T12:10:47.747 に答える
1

多重継承はclass a extends b extends c、Java で許可されていないことを意味します

追加情報java が多重継承を提供しない理由

オーバーライドの概念により、Java は多重継承をサポートしていません。「Deadly Diamond of Death」をコンセプトにしています。つまり、Java にはオーバーライドの概念があるためです。パラメータの戻り値の型を含むメソッド名が同じであるべきオーバーライドとは何かを知っています。Javaで複数の継承が提供されている場合。例: A<- B, A-

これが、Java に多重継承がない理由です。 ソース

于 2013-10-11T12:08:12.297 に答える
1

多重継承とは、1 つのクラスが他の 2 つ以上のクラスから直接継承することを意味します。たとえば、クラス A で B と C の両方を拡張することはできません。あなたが説明したように、複数のクラスがすべて同じクラスを拡張しても問題ありません。これは、単一継承の複数のインスタンスにすぎません。

于 2013-10-11T12:08:59.473 に答える
1

多重継承とは、クラス A からクラス B と C を継承することです。

Java には多重継承はありませんが、任意のインターフェイスを実装できますが、拡張できるクラスは 1 つだけです。

public interface InterfaceA{

}

public interface InterfaceB{

}

public class classA implements InterfaceA, InterfaceB{

}

public class classB extends classA{

}

Java で多重継承を実行する方法

Java で多重継承を実行するプロセスは、複合デザイン パターンを使用することです。

あなたが持っていると想像してください

public interface IPizza{
    void build();
}

public class CheesePizza implements IPizza{
    public void build(){
    }
}

public class BarbPizza implements IPizza{
    public void build(){
    }
}

BarbCheesePizza を実装したい場合は、Composite を使用することをお勧めします。それぞれのインスタンスがあります。

public class BarbCheesePizza implements IPizza{

    private BarbPizza barbPizza;
    private CheesePizza cheesePizza;

    public void build(){
         barbPizza.build();
         cheesePizza.build();
    }
}
于 2013-10-11T12:09:51.107 に答える
1

基本クラスは、必要な数の子を持つことができます。ただし、2 つ以上の親を拡張する (子である) クラスを持つことはできません。Diamond Inheritance 問題と Java での解決方法を参照してください: http://www.programmerinterview.com/index.php/java-questions/java-diamond-problem/

于 2013-10-11T12:10:45.253 に答える