私は次の2つのコードを持っています:
/**
*
*/
package com.akshu.multithreading;
/**
* @author akshu
*
*/
public class MyThread extends Thread {
protected int b;
private int a;
@Override
public void run() {
super.run();
System.out.println("int a:"+a);
}
}
-----------
package com.akshu.utility;
import com.akshu.multithreading.MyThread;
public class MyUtility extends MyThread{
public static void main(String args[])
{
MyThread th1 = new MyThread();
int d =th1.b; // line1
System.out.println("int d"+d);
}
}
上記のコードファイルを使用して、保護されたアクセス修飾子の目的を理解しようとしています。MyUtilityファイルで、クラスMyThreadの変数bを参照しようとしていますが、以下のエラーが発生します。
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The field MyThread.b is not visibilty.
私の懸念は、すでにMythreadを拡張しているので、変数bはサブクラスからアクセスできるはずです。しかし、コンパイル時のエラーが発生します。また、スーパークラスでこの変数を静的として宣言すると、直接アクセスできました。インスタンスを介してアクセスしようとすると、何が問題になりますか?