protectedクラス
| 日本語 | 保護クラス |
| 英語 | protected class |
| ふりがな | ぷろてくてっどくらす |
| フリガナ | プロテクテッドクラス |
protectedで修飾されたクラス。
「protected class クラス名{ クラスの定義 }」のように、クラスの宣言の先頭にprotectedが付けられたクラス。
内部クラスとして宣言する際に付ける事で、外部クラス、サブクラス及び同パッケージの他クラスからのみ使用することができる。
……が、仕様が複雑なうえ、いまいち使い道が判らないため、ほとんど使用することはないだろう。
「protected class クラス名{ クラスの定義 }」のように、クラスの宣言の先頭にprotectedが付けられたクラス。
内部クラスとして宣言する際に付ける事で、外部クラス、サブクラス及び同パッケージの他クラスからのみ使用することができる。
……が、仕様が複雑なうえ、いまいち使い道が判らないため、ほとんど使用することはないだろう。
参考サイト
- (参考サイトはありません)
// Sample.java
// testパッケージのOtherPackageClassクラスを使用します。
import test.OtherPackageClass;
public class Sample
{
public static void main( String[] args )
{
// protectedクラスを使用してみます。
NormalClass normalClass = new NormalClass();
NormalClass.ProtectedClass protectedClass = normalClass.new ProtectedClass();
protectedClass.output();
// ProtectedClass#output()
// このように、外から使うことができます。
}
/**
* OtherPackageClassを使います。
*/
void useOtherPackageClass()
{
// protectedクラスを使用してみます。
// OtherPackageClass.ProtectedClass protectedClass2;
// コンパイルエラー:
// 型 OtherPackageClass.ProtectedClass は不可視です。
// このように、他のパッケージにあるクラスの中の
// protectedクラスは使用できません。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* protectedクラス。
*/
protected class ProtectedClass
{
/**
* protectedフィールド。
*/
public void output()
{
System.out.println( "ProtectedClass#output()" );
}
}
}
/**
* グローバルなprotectedクラスは作れません。
*/
// protected class ProtectedClassOnGlobal{}
// コンパイルエラー:
// クラス ProtectedClassOnGlobal の無許可の修飾子 ; public、abstract、および final のみ許可されています。
/**
* OtherPackageClassのサブクラス。
*/
class ExtendedOtherPackageClass extends OtherPackageClass
{
/**
* 出力用メソッド。
*/
public void output()
{
ExtendedProtectedClass extendedProtectedClass = new ExtendedProtectedClass();
extendedProtectedClass.output();
// このように、サブクラス内でサブクラスを作れば
// 使うことができます。
// 直接は使えません。
// ProtectedClass protectedClass = new ProtectedClass();
// コンパイルエラー:
// コンストラクター OtherPackageClass.ProtectedClass() は不可視です。
}
/**
* protectedクラスのサブクラス。
*/
class ExtendedProtectedClass extends ProtectedClass
{
}
}
// test/OtherPackageClass.java
package test;
/**
* 別パッケージのフツーのクラス。
*/
public class OtherPackageClass
{
/**
* protectedクラス。
*/
protected class ProtectedClass
{
/**
* protectedフィールド。
*/
public void output()
{
System.out.println( "ProtectedClass#output()" );
}
}
}
// testパッケージのOtherPackageClassクラスを使用します。
import test.OtherPackageClass;
public class Sample
{
public static void main( String[] args )
{
// protectedクラスを使用してみます。
NormalClass normalClass = new NormalClass();
NormalClass.ProtectedClass protectedClass = normalClass.new ProtectedClass();
protectedClass.output();
// ProtectedClass#output()
// このように、外から使うことができます。
}
/**
* OtherPackageClassを使います。
*/
void useOtherPackageClass()
{
// protectedクラスを使用してみます。
// OtherPackageClass.ProtectedClass protectedClass2;
// コンパイルエラー:
// 型 OtherPackageClass.ProtectedClass は不可視です。
// このように、他のパッケージにあるクラスの中の
// protectedクラスは使用できません。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* protectedクラス。
*/
protected class ProtectedClass
{
/**
* protectedフィールド。
*/
public void output()
{
System.out.println( "ProtectedClass#output()" );
}
}
}
/**
* グローバルなprotectedクラスは作れません。
*/
// protected class ProtectedClassOnGlobal{}
// コンパイルエラー:
// クラス ProtectedClassOnGlobal の無許可の修飾子 ; public、abstract、および final のみ許可されています。
/**
* OtherPackageClassのサブクラス。
*/
class ExtendedOtherPackageClass extends OtherPackageClass
{
/**
* 出力用メソッド。
*/
public void output()
{
ExtendedProtectedClass extendedProtectedClass = new ExtendedProtectedClass();
extendedProtectedClass.output();
// このように、サブクラス内でサブクラスを作れば
// 使うことができます。
// 直接は使えません。
// ProtectedClass protectedClass = new ProtectedClass();
// コンパイルエラー:
// コンストラクター OtherPackageClass.ProtectedClass() は不可視です。
}
/**
* protectedクラスのサブクラス。
*/
class ExtendedProtectedClass extends ProtectedClass
{
}
}
// test/OtherPackageClass.java
package test;
/**
* 別パッケージのフツーのクラス。
*/
public class OtherPackageClass
{
/**
* protectedクラス。
*/
protected class ProtectedClass
{
/**
* protectedフィールド。
*/
public void output()
{
System.out.println( "ProtectedClass#output()" );
}
}
}
// Sample.java
// testパッケージのOtherPackageClassクラスを使用します。
import test.OtherPackageClass;
public class Sample
{
public static void main( String[] args )
{
// protectedクラスを使用してみます。
NormalClass normalClass = new NormalClass();
NormalClass.ProtectedClass protectedClass = normalClass.new ProtectedClass();
protectedClass.output();
// ProtectedClass#output()
// このように、外から使うことができます。
}
/**
* OtherPackageClassを使います。
*/
void useOtherPackageClass()
{
// protectedクラスを使用してみます。
// OtherPackageClass.ProtectedClass protectedClass2;
// コンパイルエラー:
// 型 OtherPackageClass.ProtectedClass は不可視です。
// このように、他のパッケージにあるクラスの中の
// protectedクラスは使用できません。
}
}
/**
* フツーのクラス。
*/
class NormalClass
{
/**
* protectedクラス。
*/
protected class ProtectedClass
{
/**
* protectedフィールド。
*/
public void output()
{
System.out.println( "ProtectedClass#output()" );
}
}
}
/**
* グローバルなprotectedクラスは作れません。
*/
// protected class ProtectedClassOnGlobal{}
// コンパイルエラー:
// クラス ProtectedClassOnGlobal の無許可の修飾子 ; public、abstract、および final のみ許可されています。
/**
* OtherPackageClassのサブクラス。
*/
class ExtendedOtherPackageClass extends OtherPackageClass
{
/**
* 出力用メソッド。
*/
public void output()
{
ExtendedProtectedClass extendedProtectedClass = new ExtendedProtectedClass();
extendedProtectedClass.output();
// このように、サブクラス内でサブクラスを作れば
// 使うことができます。
// 直接は使えません。
// ProtectedClass protectedClass = new ProtectedClass();
// コンパイルエラー:
// コンストラクター OtherPackageClass.ProtectedClass() は不可視です。
}
/**
* protectedクラスのサブクラス。
*/
class ExtendedProtectedClass extends ProtectedClass
{
}
}
// test/OtherPackageClass.java
package test;
/**
* 別パッケージのフツーのクラス。
*/
public class OtherPackageClass
{
/**
* protectedクラス。
*/
protected class ProtectedClass
{
/**
* protectedフィールド。
*/
public void output()
{
System.out.println( "ProtectedClass#output()" );
}
}
}




