Java访问受保护的属性

时间:2012-10-05 23:49:09

标签: java attributes protected

我是Java的新手,需要一些帮助

我有一个抽象的超类,它有2个受保护的属性

public abstract class Superclass {
  protected int a = 0;
  protected int b = 0;
  ...
  }

然后我有一个扩展超类的子类,我希望访问a和b,但我不知道如何。我在网上搜索并没有找到任何东西。

public class Subclass extends Superclass {
  public boolean someMethod(){
  .....
  // at the end i need to do
  a += 1;
  return true
  }
}

我收到编译错误: “无法实现的政治家”

感谢您的帮助。

6 个答案:

答案 0 :(得分:2)

界面无法定义protected个成员。您应该看到编译器错误。

超类的

protected成员可用于子类:您只需要在extends超类(抽象超类或其他)的任何类中引用它们。

请参阅访问修饰符表here

答案 1 :(得分:2)

如果你有这个

abstract class TestABC {
    protected int a = 0;
    protected int b = 0;
}

然后这个:

public class TestABCD extends TestABC{
    public void increaseA() {
      try {
        //do method including return
      } finally {
         a++;
      }
    }

    public String printIt() {
      System.err.println(t);
      increaseA();
      System.err.println(t);
    }

    public static void main(String[] args){ 
        TestABCD t = new TestABCD();
        t.printIt();
    }
}

你可以看到我可以直接访问println中的t.a,因为我的main方法在子类中。如果变量为private而不是protected,则您将无法访问它。

答案 2 :(得分:1)

“无法访问的语句”表示代码中没有可以让您进入程序中此行的路径。它与受保护的字段无关。检查,return之前是否有a+=1声明,在您到达此行之前始终退出您的方法。或者,如果您的a+=1位于永不执行的if - 块中,因为您指定的条件始终评估为false

答案 3 :(得分:0)

班级应该可以访问& b就像那样但是如果你声明一个“隐藏”的a或b,那么如果你想要a& b来自超级班级你就像那样使用它们

稍微有点成为镜子的房子,但是当事情涉及时它很方便

答案 4 :(得分:0)

如果您有一个使用受保护方法(如

)扩展超类的子类
public abstract class SuperClass{

protected int a = 0;
protected int b = 0;

}

您所要做的就是直接在子类中调用这些变量,如下所示:

public class SubClass extends SuperClass{

    public Subclass(){
       System.out.println("int a value:" + a);
       System.out.println("int b value:" + b);
    }
}

答案 5 :(得分:0)

您的问题与受保护完全没有关系。这与你在尝试将代码语句在他们不属于的类中裸露出来有关。而是将那行违规代码放在方法或构造函数中。

public class Subclass extends Superclass {
  a += 1; // **** this line ****
}

注释行无效。在类中裸露的唯一代码是带有初始化的变量声明或声明,而不是不涉及变量声明的语句。再次,将该行放在构造函数或方法中:

public class Subclass extends Superclass {
  public Subclass() {
    a += 1; // **** this line ****
  }
}