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()" ); } } }