0

クラス B がクラス A から継承する場合、継承で使用される場合、クラス B は常に A のサブタイプである必要がありますか?

B が A のサブタイプでない場合、継承を使用して B に追加のコードを提供できるかどうかを考えています。

4

2 に答える 2

0

typeAが から継承する場合、次Bの 2 つのことを意味します。

  1. クラス `A` は、クラス名を指定しなくても、クラス `B` の public および protected 静的メソッドを使用できます。クラス `A` のオブジェクトは、クラス名を指定せずに、`B` のすべての public および protected クラス メンバーを暗黙的に含みます。それらを再指定します。
  2. タイプ `B` のオブジェクトを受け入れるコードは、コンパイル時にタイプ `A` のオブジェクトを受け入れ、クラス `A` のオブジェクトは、クラス `B` の public および protected インスタンス メソッドをそれ自体で使用できるようになります。

インターフェイスは本質的に概念 #2 を具体化しますが、#1 ではありません (インターフェイスには静的メソッドがなく、指定せずに暗黙的に使用できるメンバーがないため)。#2 なしで #1 を達成する組み込みの方法はありません。#2 なしで #1 を使用することの唯一の重要な利点は、入力を節約できることです。

于 2012-06-11T17:15:24.263 に答える
0

もしも:

class B extends A

ThanBは、定義上、 のサブタイプですA

それを望まない場合は、基本的に実装とのインターフェースである PHP のtraitsを使用できます。

于 2012-06-11T17:18:18.753 に答える