2017-12-06 8 views
-1

PrintStreamクラスを新しく定義したクラスに拡張してprintln(int)をオーバーライドしたいと考えています。PrintStreamクラスのプロパティを新しく派生したクラスに拡張(継承)できない

import java.io.PrintStream; 

class Newer extends PrintStream 
{ public void println(int x) { 

System.out.println(x); 
} 

public static void main(String[] args) 
{ 
Newer n=new Newer(); 

n.println(2); 
} 

} 

私は

extendsprintstream.java:3: cannot find symbol 
symbol : constructor PrintStream() 
location: class java.io.PrintStream 
class Newer extends PrintStream 
^ 
1 error 

なぜ私はクラスのPrintStreamを継承することはできませんよと言ってコンパイルエラーを持っていますか?それはsuper()を呼び出し、コンパイラによって作成されたデフォルトの引数なしのコンストラクタ、、、基底クラスの、すなわち引数なしのコンストラクタを取得するよう

+0

コードを説明するのではなく、質問に投稿してください。 – csmckelvey

+1

コンパイルしようとしている_actual_コードを投稿するのはどうですか... – csmckelvey

+0

他の質問に移動しているので、最後にアドバイスしてください - 実際のコードを投稿してください(上記のフォーマットではありません)エラーメッセージ。あなたの質問では、あなたのエラーメッセージがあなたのコードと一致しないため、これらのうちの1つが正しくありません。あなたの質問を投稿する前にこれらの簡単なことをすることができない場合、 – csmckelvey

答えて

1
  1. Newerは、全くのコンストラクタを持っていません。
  2. 基本クラスはPrintStreamであり、引数なしのコンストラクタはありません。

コンパイルエラーが発生します。 Newer()のコンストラクタは、super(...)を経由して、既存のコンストラクタの1つをPrintStreamと呼び出す必要があります。たとえば、

public Newer() 
{ 
    super(System.out); 
} 

println()を上書きする必要はありません。

これをやっているのはなぜか別の謎です。 Newerはまったく必要ありません。System.outのみ必要です。

0

問題はここにと何がを拡張していますがスーパーモミクラスのコンストラクタを使用していないということではありません。 別のクラスを拡張することはできず、このクラスの初期化を見落とします。あなたはコンストラクタ-Javaコンパイラを持っていないときに実際に何が起こるかJavaでは

は(空のスーパーを呼び出して、デフォルトの1)を行うコールをので、実際のように見えます:であるため

public Newer{ 
super(); 
} 

そして、あなたのケースPrintStreamに空のコンストラクタがありません。Oracle help centerにあるものだけがコンパイルエラーになります。

関連する問題