据我所知,继承的类也应该继承变量,那么为什么这段代码不起作用?
public class a {
private int num;
public static void main(String[] args) {
b d = new b();
}
}
class b extends a {
public b() {
num = 5;
System.out.println(num);
}
}
答案 0 :(得分:12)
num
变量的访问修饰符为private
,private
成员无法通过自己的类访问,因此请将其protected
从子类中访问。
public class a {
protected int num;
...
}
的参考
答案 1 :(得分:2)
据我所知,继承的类应该继承变量,
你弄错了,instance variables
在子类中没有覆盖。继承和多态不适用于实例字段。如果它们被标记为受保护或公开,则它们仅在您的子类中可见。目前你有超级类变量标记为私有。没有其他类可以访问它。将其标记为受保护或公共,以便其他类访问它。
答案 2 :(得分:2)
public class A{
public int num=5;
public static void main(String[] args) {
b d = new b();
d.c();
}
}
class b extends A
{
public void c()
{
System.out.println(num);
}
}
这绝对是我认为你需要的东西
答案 3 :(得分:1)
private
范围只能由包含类访问。
要使其工作,num
需要声明protected
范围。
但是,这也可以使同一个包中的其他类可以访问它。我的建议是创建一个get
/ set
方法,以保持适当的封装。
然后,您可以通过调用num
b
中的getNum()
答案 4 :(得分:1)
因为您使用的是私有访问修饰符。如果您使用私有实例变量或方法,它只能访问类中的 (甚至几个类包含一个源文件) 。我们可以使用getter和setter将私有变量暴露给外部。以下代码将编译而没有错误
public class A {
private int num;
public void setNum(int num)
{
this.num = num;
}
public int getNum()
{
return num;
}
public static void main(String[] args)
{
B d = new B();
}
}
class B extends A
{
public B()
{
SetNum(5);
System.out.println(getNum());
}
}
答案 5 :(得分:0)
您无法从子类访问基类的私有成员。只有修饰符为private / protected
的成员