初心者向けのJava講座です。一緒にJavaを勉強しませんか?
はじめてのJava入門初心者向けのJava講座 |
オーバーライド時におけるアクセス修飾子
メソッドにはアクセス修飾子をつけてクラスからメンバーへのアクセスを制限することができました。
オーバーライドの時もそれが適用されます。
しかしオーバーライド時にはひとつだけ修飾子に関する決まりごとがあります。
オーバーライド時のアクセス修飾子のルール
サブクラスのメソッドはアクセスレベルをスーパクラスの メソッドより狭くしてはいけない
つまり、アクセス修飾子のところで説明したのを思い出してくださいアクセス修飾子のレベルは
public → protected → 省略 → private の順でした。したがって、もしスーパークラスのアクセス修飾子がpublicであれば サブクラスの
アクセス修飾子は publicしかつけれないことになります。
スーパークラスのアクセス修飾子を省略した場合は、サブクラスでは
public protected 省略 までのアクセス修飾子を指定できることになります。
ではその違いをわかるようにサンプルプログラムを見ていきます。
まずはエラーになるプログラムを見ていきます。
サンプルプログラム(Sample50.java)
class Sample50{
public static void main(String args[]){
Sub50 obj = new Sub50();
obj.method();
}
}
class Super50{
public void method(){
System.out.println("これはスーパークラスです");
}
}
class Sub50 extends Super50{
//サブクラスではアクセス修飾子を省略しています。
void method(){
System.out.println("これはサブクラスです");
}
}
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
コンパイル・実行してみます。
このようなエラーがでました。
実にわかりやすいエラーだと思います。
スーパークラスのmethod()メソッドにはpublic をつけているのにサブクラスには省略
しています。このためこのようなエラーが出ます。
省略するか または、privateにしてやる必要があります。
次の2つのサンプルプログラムを見ていきます。
サンプルプログラム(Sample50_1.java)
class Sample50_1{ public static void main(String args[]){ Sub50_1 obj = new Sub50_1(); obj.method(); } } class Super50_1{ public void method(){ System.out.println("これはスーパークラスです"); } } class Sub50_1 extends Super50_1{ //サブクラスにもpublicをつけました public void method(){ System.out.println("これはサブクラスです"); } }
プログラムをコピーする場合すべて選択をクリックしてください。
サンプルプログラム(Sample50_2.java)
class Sample50_2{ public static void main(String args[]){
Sub50_2 obj = new Sub50_2(); obj.method(); } } class Super50_2{ //スーパークラスのpublic をはずしました void method(){ System.out.println("これはスーパークラスです"); } } class Sub50_2 extends Super50_2{ //サブクラスにもpublicをつけました public void method(){ System.out.println("これはサブクラスです"); } }
プログラムをコピーする場合すべて選択をクリックしてください。
Sponsored link
2つのプログラムをコンパイル・実行します。
このような結果になりました。
Sample50_1のほうはサブクラスにもpublicをつけることによりスーパークラスと
アクセス修飾子のレベルを同じにしてやりました。
こうすることでサブクラスにはpublicがつけられています。
したがってサブクラスのほうがアクセス修飾子のレベルが広いことがわかります。
このことがオーバーライド時の修飾子のルールです。
サブクラスはスーパークラスよりアクセス修飾子のレベルを狭くしてはいけないということです。