2017-03-08 3 views
-2

私は "質問"と呼ばれるスーパークラスを持っています。私はそれから派生した2つのサブクラス「QuestionSA」(短い答え)と「QuestionTF」(真/偽)を持っています。私はQuestionTFからQuestionSAでコンストラクタにアクセスする必要がjavaで別のクラスのコンストラクタにアクセスするには?

public class QuestionSA extends Question { 

private static char[] givenAnswer; 

// ======================================================== 
// Name: constructor 
// Input: the type of question, the level, 
// the question and answer, as strings 
// Output: none 
// Description: overloaded constructor that feeds data 
// ======================================================== 
QuestionSA(String type, String level, String question, String answer) { 
    this.type = type; 
    this.level = level; 
    this.text = question; 
    this.answer = answer; 
} 

これは次のようにQuestionSAが見えるものです。私はこのようにC++でやったことがあります:

QuestionTF::QuestionTF(string type, string level, string question, string answer) 
: QuestionSA(type, level, question, answer) {} 

私はこれをJavaでどうやってできますか?

+0

クラスQuestionTFを追加できますか? – Jens

+0

私は明確にするために編集する必要があります。私はこの名前が子クラスであることを示していることを知っていましたが、私はそれを二重にチェックしなければなりませんでした。 – ByeBye

+1

なぜ 'givenAnswer'は静的ですか? – tkausl

答えて

3

QuestionSAのサブクラスの場合は、superキーワードを使用してコンストラクタにアクセスできます。

QuestionTF(String type, String level, String question, String answer) { 
    super(type, level, question, answer); 
} 

もしそうでなければ、新しいオブジェクトを作成するために親クラスのコンストラクタのサブクラスを使用することはできません。

+0

QuestionSAはQuestionTFのスーパークラスではありません。 – Jens

+0

C++の初期化リストを使用することはサブクラスであることを示していますか? – ByeBye

+0

正確には、QuestionSAとQuestionTFの両方が、Questionの同じレベルの派生クラスです。 QuestionSAはQuestionTFのスーパークラスではなく、その逆もあります。 – Dima

3

コンストラクタは、クラスのオブジェクトの作成中にJVMによって呼び出されています。したがって、クラスのコンストラクタを呼び出す場合は、そのクラスのオブジェクトを作成する必要があります。 子クラスから親クラスのコンストラクターを呼び出す場合は、子コンストラクターの最初の行でsuper()を呼び出すことができます。

+0

QuestionTFクラスのQuestionSAクラスのインスタンスを作成し、QuestionTFのコンストラクターのために渡した引数がQuestionSAのコンストラクターに渡されるということですか?これが私がC++で行った全理由です。 – Dima

関連する問題