我有以下两段代码:

/**
 *
 */
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.


我担心的是变量b应该可以从子类访问,因为我已经扩展了Mythread。但这给了我编译时错误。另外,当我在超类中将此变量声明为static时,我可以直接访问它。那么当我尝试通过实例访问时,我在做什么错?

最佳答案

main方法不是MyThread的明确组成部分-如果您要实现另一个功能,例如prtintB(),您可以将直接访问与“。”一起使用操作员。要从main访问它,您必须编写一个getter函数。

10-08 17:23