据我了解,继承的类也应该继承变量,那么为什么这段代码不起作用?
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);
}
}
据我了解,继承的类也应该继承变量,那么为什么这段代码不起作用?
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);
}
}
num
变量的访问修饰符是private
并且private
成员不能从自己的类中访问,因此使其protected
可以从子类访问。
public class a {
protected int num;
...
}
据我了解,继承的类也应该继承变量,
你错了,在子类instance variables
中没有被覆盖。继承和多态不适用于实例字段。如果它们被标记为受保护或公开,它们仅在您的子类中可见。目前你有标记为私有的超类变量。没有其他类可以访问它。将其标记为受保护或公开,以便其他类访问它。
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);
}
}
我认为这绝对是你需要的
private
范围只能由包含类访问。
为此,num
需要声明protected
范围。
但是,这也将使其可被同一包中的其他类访问。我的建议是创建一个get
/set
方法以保持适当的封装。
然后你可以通过调用num
在课堂上访问b
getNum()
因为您使用的是私有访问修饰符。如果您对实例变量或方法使用私有,则它只能在类内部访问(甚至多个类都包含一个源文件)。我们可以使用 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());
}
}
您无权从子类访问基类的私有成员。只有具有 private/protected 修饰符的成员