Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java访问受保护的属性_Java_Attributes_Protected - Fatal编程技术网

Java访问受保护的属性

Java访问受保护的属性,java,attributes,protected,Java,Attributes,Protected,我是Java新手,需要帮助吗 我有一个抽象超类,它有两个受保护的属性 public abstract class Superclass { protected int a = 0; protected int b = 0; ... } 然后我有一个扩展超类的子类,我希望访问a和b,但我不知道如何访问。我在网上搜索,什么也没找到 public class Subclass extends Superclass { public boolean someMethod(){

我是Java新手,需要帮助吗

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

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
  }
}
我得到编译错误: 遥不可及的政治家

谢谢你的帮助

接口无法定义受保护的成员。您应该会看到一个编译器错误

子类可以使用超类的受保护成员:您只需要在扩展超类抽象超类的任何类或其他类中引用它们

请参阅访问修饰符表。

如果您有此选项

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,因为我的主方法在子类中。如果变量是私有的而不是受保护的,您将无法访问它。

该类应该可以像那样访问a&b,但是如果您声明了一个隐藏该类的a或b扩展类,如果您希望a&b不被超类访问,您可以像那样使用它们


有点像是一个镜像之家,但如果有一个子类使用受保护的方法(如

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);
    }
}

你的问题根本与受保护无关。这与您试图将代码语句赤裸裸地放在类中它们不属于的地方有关。相反,将这行有问题的代码放在方法或构造函数中

public class Subclass extends Superclass {
  a += 1; // **** this line ****
}
注释行无效。该类中唯一可以属于该类的代码是变量声明或带有初始化的声明,而不是不涉及变量声明的语句。同样,将该行放在构造函数或方法中:

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

Unreachable语句意味着代码中没有路径可以让您到达程序中的这一行。它与受保护的字段无关。检查,如果在a+=1之前有一个return语句,它总是在到达此行之前退出方法。或者,如果a+=1位于从不执行的if块中,因为您指定的条件的计算结果始终为false。

接口不能有字段成员。实际上,它是一个抽象类。我弄糊涂了…对不起…@Alessandro:你只是在子类中访问它,就像它是公共的一样。这没有什么不同,只是在课堂外看不到。你没有告诉我们你被困在哪里。这仍然是一个非常不完整的问题。向我们显示您的代码和错误消息,并准确地告诉我们什么不起作用。您只需要一个智能IDE来帮助您调试,不要担心。我在尝试时遇到以下错误:unreachable语句更改了它,请立即尝试。无论如何,它不应该给出unreachableyeah-忘记extends子句:-好的,好的,我知道。但我得到了一个编译错误:unreachable语句。我知道它是受保护的。我不明白为什么它会给我这个错误。你能发布你的方法代码吗?我不能确定,但听起来这个方法在到达那一行之前遇到了一个return语句。它很长,所以我只是要求指定不起作用的部分。您需要在方法中访问变量。我更新了上面的示例,向您展示了它是如何工作的。是的,这就是问题所在,我在一个方法中访问它,它不断抛出unreachable语句是的,是的,我在一个方法中添加了它,它仍然抛出unreachable语句statement@alessandro:显示代码,否则它不会发生。