5

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

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

6 回答 6

15

num变量的访问修饰符是private并且private成员不能从自己的类中访问,因此使其protected可以从子类访问。

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

控制对类成员的访问的参考

于 2013-02-15T09:55:37.950 回答
2

据我了解,继承的类也应该继承变量,

你错了,在子类instance variables没有被覆盖。继承和多态不适用于实例字段。如果它们被标记为受保护或公开,它们仅在您的子类中可见。目前你有标记为私有的超类变量。没有其他类可以访问它。将其标记为受保护或公开,以便其他类访问它。

于 2013-02-15T09:56:02.933 回答
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);
    }
}

我认为这绝对是你需要的

于 2015-03-09T20:31:33.637 回答
1

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

为此,num需要声明protected范围。

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

然后你可以通过调用num在课堂上访问bgetNum()

于 2013-02-15T09:55:33.837 回答
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());
     }
   }
于 2013-02-15T11:14:11.740 回答
0

您无权从子类访问基类的私有成员。只有具有 private/protected 修饰符的成员

于 2013-02-15T09:55:37.063 回答