101

クラスを として定義できないのはなぜprotectedですか?

できないことはわかっていますが、なぜですか?何か特別な理由があるはずです。

4

13 に答える 13

112

意味がないからです。

保護されたクラス メンバー (メソッドまたは変数) は、サブクラスからもアクセスできることを除いて、package-private (デフォルトの可視性) と同じです。
Java には「サブパッケージ」や「パッケージの継承」などの概念がないため、class protected または package-private を宣言することは同じことです。

ただし、ネストされた内部クラスを保護またはプライベートとして宣言することはできます。

于 2010-10-06T04:49:13.493 に答える
46

ご存知のように、default はパッケージ レベルのアクセス用であり、protected はパッケージ レベルと非パッケージ クラス用ですが、このクラスを拡張します (ここで注意すべき点は、クラスが表示されている場合にのみクラスを拡張できるということです!)。このように言いましょう:

  • 保護された最上位クラスは、そのパッケージ内のクラスから見えるようになります。
  • パッケージ (サブクラス) の外で見えるようにすることは、少し混乱してトリッキーです。保護されたクラスの継承を許可するクラスはどれですか?
  • すべてのクラスがサブクラス化できる場合は、パブリック アクセス指定子に似ています。
  • 何もない場合は、デフォルトに似ています。

このクラスが少数のクラスのみによってサブクラス化されることを制限する方法がないため (パッケージ内/パッケージ外のすべての利用可能なクラスのうち少数のクラスのみによって継承されるクラスを制限することはできません)、保護されたアクセス指定子は使用されません。トップレベルクラス向け。したがって、許可されていません。

于 2013-04-30T05:50:19.130 に答える
15
public class A
{
    protected class B
    {
    }
}
于 2010-10-06T04:51:13.430 に答える
4

フィールド protected を定義すると、そのフィールドはパッケージ内だけでなくパッケージ外からも継承のみでアクセスできるようになります (子クラス内のみ)。

したがって、クラスを保護することが許可されている場合、パッケージ内で非常に簡単にアクセスできますが、パッケージ外でそのクラスにアクセスするには、最初に、このクラスが定義されているそのパッケージであるエンティティを拡張する必要があります。

また、パッケージは拡張できない (インポートできる) ため、保護されたクラスを定義すると、再びパッケージ プライベートになります。したがって、クラスをプライベートに定義するメリットはありません。それは、物事があいまいになるだけです。

詳細については、外部 Java クラスを非公開または保護できない理由を参照してください。

于 2016-10-12T10:31:47.817 に答える
1

Protected は public とは異なります。保護されたパッケージレベルのアクセスと、継承によってのみパッケージの外部にアクセスできるクラスの両方があります。クラスがパッケージの外部でAと言う場合、他のパッケージからクラスを継承します(INHERITANCEを使用して保護されたメソッドを使用)、このクラスBのメソッドにアクセスできますには保護されたメソッドがありますが、このクラスから派生したサブクラスがあります。つまり、A は保護されたメソッドにアクセスできません。パブリックでは逆のことが起こります。

例:

package 2;
class B
{
protected void method1()
{
}
}
package 1;
import 2.B;
class A extends B
{
//can access protected method
}
class C extends A
{
//can't access the protected method
}
于 2015-03-27T17:03:04.337 に答える
0

「保護」の動作 = 「デフォルト」の動作 + 「任意のパッケージの任意のサブクラスで使用する」。

とにかく、クラスのデフォルトのアクセス修飾子がありますが、保護されたアクセス修飾子から得られる唯一の利点は、サブクラス化を通じて任意のパッケージで使用することです。ただし、サブクラスの場合、親の「保護された」クラスの可視性は非公開になります。そのため、アクセスできません。基本的に、保護された最上位クラスがある場合、外部クラスはそれをサブクラス化することによってアクセスできません。したがって、最上位クラスの保護は無意味です。

于 2014-07-03T15:43:14.993 に答える