私はこのようなクラスがあります。Java - 親クラスコンストラクタを呼び出すことなくクラスをオーバーライドできますか?
public class BaseClass
{
public BaseClass(URL url, String something, String whatever)
{
// Do some stuff with URL, something and whatever
}
public List ImportantFunction()
{
// Some important stuff here
}
}
を私は、しかし、私は、コンストラクタで別のものをしたい、このクラスを使用します。コンストラクタが私にそれらを別々に行うために必要なこと。しかし、私は他のクラスメソッドのすべての機能を使いたいと思っています。
私は、クラスを拡張するのが最も簡単だと考えました。私はこれを行うときただし、コンストラクタは親のコンストラクタを呼び出すために私を必要とします。
super(url, something, whatever);
は、それが基本クラスを拡張しますが、完全に異なるコンストラクタを持つことは可能ですか?私はあなたがスーパークラスのコンストラクタを呼び出す必要があります...
これで、カスタマイズしたいクラスがあるとします。そして、このクラスはどこかのオンラインから来ていると言うことができます。明らかに、元のコードを編集するだけでそれをカスタマイズするのは悪い考えです。その代わりに、クラスを拡張してカスタマイズを行います。そうすれば、クラスの新しいバージョンがオンラインでリリースされると、コード内のすべての変更をもう一度やり直す必要はありません。カスタムクラスを拡張するだけです。あなたが言っていることは、クラスをカスタマイズしたい場合、それらは親クラスのコンストラクタを呼び出すために強制されるということです。 –
@Jakobudクラスが 'final'の場合、それをサブクラス化することはできません。呼び出したいコンストラクタがない場合は使用できません。これがJavaの仕組みです。Pythonのようなものではありませんが、修正プログラムを猿で修正することはできません。 – Borealid
@ JakeWilson ...デフォルトのコンストラクタを 'private'にすることができます。この場合、使用できないことが保証されます。しかし、@Borealidが言うように、あなたは** _ A_コンストラクタ**を呼び出さなければなりません。 – will