试着写了一段代码,主要考察子类继承父类私有数据成员的情况
class Father
{
        private int i;
        Father(int i)
        {
                this.i = i;
                System.out.println("Father is gouzao !");
        }
        public void getfather()
        {
                System.out.println(i);
        }
}class Son extends Father
{
        private int j;
        Son(int i,int j)
        {
                super(i);
                System.out.println("Son is gouzao");
                this.j = j;
        }
        public void getson()
        {
                System.out.println(j);//这里如果改成System.out.println(i,j)却通不过编译
        }
}class Privatejicheng
{
        public static void main(String[] args)
        {
                Father f = new Father(1);
                f.getfather();
                Son s = new Son(1,2);
                s.getson();
                s.getfather();//这句话编译运行都通过,为什么子类还能访问到private的数据变量
                
        }
}请各位朋友帮帮忙。谢谢!

解决方案 »

  1.   

    1 println方法本来就一个参数。
    2 只是使用父类的方法,至于父类方法里用到些什么,和子类无关。
    3 看来你确实得好好看看基础
      

  2.   

    s.getfather();//这句话编译运行都通过,为什么子类还能访问到private的数据变量为了让子类访问父类的private,所以规定了get,和set方法啊!
      

  3.   

    是你自己在父类用了一个public方法让子类访问的
      

  4.   

    (1)System.out.println()输出的数据用“+”连接而不是用“,”。
    (2)楼上的说的没错,你没有直接访问private的数据,而是通过调用public方法访问的,自然可以的。
      

  5.   

    1、 System.out.println(j);//这里如果改成System.out.println(i,j)却通不过编译因为i在父类里面是私有的private int i;所以在这里其子类不能直接访问。而且 println方法本来就一个参数。2、s.getfather();//这句话编译运行都通过,为什么子类还能访问到private的数据变量
    不能访问指的是不能直接访问,而不是不存在的或者是不能通过其它方法访问。
    这里是通过public void getfather()方法访问!
      

  6.   

    对private变量"不继承"(并非真的不继承)
    子类也不能访问
      

  7.   

    父类就是为了子类能访问它的私有域,才构造了get和set 的方法
      

  8.   

    private int i不用被子类继承
      

  9.   

    private int i 不能被子类继承,所以子类不用使用父类的私有变量。
      

  10.   

    s.getfather();//这句话编译运行都通过,为什么子类还能访问到private的数据变量
    因为Son继承Father,同时继承了getfather()方法,你调用了getfather()方法而没有直接去取它的私有变量i,倘若你在mian方法中出现f.i的字样,编译便不能通过。System.out.println(j);//这里如果改成System.out.println(i,j)却通不过编译
    println()是一个方法,它需要接受的是一个String变量,你传入i,j两个整形值编译肯定通不过。并且i是父类的私有变量,除了Father类自己的成员,其它均不能调用i