C# を紹介する Java プログラマー (初心者) として、既に実装されているメソッドをこのように再抽象化できることを発見しました (この回答のコード) 。
public class D
{
public virtual void DoWork(int i)
{
// Original implementation.
}
}
public abstract class E : D
{
public abstract override void DoWork(int i);
}
public class F : E
{
public override void DoWork(int i)
{
// New implementation.
}
}
これにより、クラス D の元の実装が完全に利用できなくなるわけではなく、サブクラス化 E (メソッドを再抽象化するクラス) を通じてサブクラス化する D のサブクラスでのみ利用できるようになるわけではないことを認識しています。クラス D が生産されていた場合の問題。
それでも、私は疑問に思っています。これはクラス D のコントラクトを変更しているのではなく、サブクラスの MUST override を指定していませんDoWork(int i)
か? これは、オープン/クローズの原則に反していませんか?
これによって壊れた実際のコードや理論上のコードさえも持っていないことに注意してください。