Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Inheritance_Extends - Fatal编程技术网

java继承变量中的继承性?

java继承变量中的继承性?,java,variables,inheritance,extends,Java,Variables,Inheritance,Extends,据我所知,继承的类也应该继承变量,那么为什么这段代码不起作用呢 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); } } privat

据我所知,继承的类也应该继承变量,那么为什么这段代码不起作用呢

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

private
范围只能由包含的类访问

要使其工作,需要声明
num
受保护的
范围

但是,这也将使同一包中的其他类可以访问它。我的建议是创建一个
get
/
set
方法,以保持正确的封装


然后,您可以通过调用
getNum()

来访问类
b
中的
num
,但您无权从子类访问基类的私有成员。只有带有private/protected的修饰符的成员

num
变量的访问修饰符是
private
,并且
private
成员不能从自己的类中访问,所以将其设置为
protected
可以从子类中访问

public class a {
     protected int num;
     ...
}
参考

据我所知,继承的类也应该继承变量


您搞错了,
实例变量
在子类中未被覆盖。继承性和多态性不适用于实例字段。只有标记为“受保护”或“公共”时,它们才在子类中可见。当前您有标记为private的超类变量。没有其他类可以访问它。将其标记为protected或public,以便其他类访问它。

因为您使用的是private访问修饰符。如果对实例变量方法使用private,则它只能访问类内部的)。我们可以使用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());
     }
   }

这绝对是你需要的我想你不能继承私人财产variables@PradeepSimha事实上,您不能只继承任何实例变量。只有标记为公共/受保护/否时,它们才可见-modifier@PremGenError是的,我知道。那又怎样?:)
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);
    }
}