-6

我是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
  }
}

我得到编译错误:“unreachable statemen”

谢谢你的帮助。

4

6 回答 6

2

接口不能定义protected成员。您应该会看到编译器错误。

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

请参阅此处的访问修饰符表。

于 2012-10-05T23:52:52.523 回答
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中访问ta,因为我的main方法在子类里面。如果变量private不是protected,您将无法访问它。

于 2012-10-05T23:54:22.613 回答
1

“无法访问的语句”意味着您的代码中没有路径可以让您到达程序中的这一行。它与受保护的领域无关。检查是否在您之前有一条return语句a+=1总是在到达此行之前退出您的方法。或者,如果您a+=1在一个if从未执行的 -block 中,因为您指定的条件始终评估为false.

于 2012-10-06T00:09:17.547 回答
0

该类应该可以像那样访问a&b,但是如果您声明“隐藏”该类的a或b,如果您想要超类中的a&b,您只需像这样使用它们

有点像镜子屋,但有时在涉及到事情时很方便

于 2012-10-05T23:55:02.300 回答
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);
    }
}
于 2012-10-05T23:55:14.270 回答
0

您的问题与 protected 无关。这与您试图将代码语句赤裸裸地放在它们不属于的类中有关。而是将那行有问题的代码放在方法或构造函数中。

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

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

public class Subclass extends Superclass {
  public Subclass() {
    a += 1; // **** this line ****
  }
}
于 2012-10-06T00:02:13.107 回答