Java访问受保护的属性
我是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(){
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:显示代码,否则它不会发生。