继承java继承变量?

时间:2013-02-15 09:54:11

标签: 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);
    }
}

6 个答案:

答案 0 :(得分:12)

num变量的访问修饰符为privateprivate成员无法通过自己的类访问,因此请将其protected从子类中访问。

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

Controlling Access to Members of a Class

的参考

答案 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

的成员