我是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
}
}
我收到编译错误: “无法实现的政治家”
感谢您的帮助。
答案 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 ****
}
}