class Base { 
private String name; 
public Base()

name="base"; 
}
public Base(String name)
{
this.name=name;
}
public void mention()

System.out.println(name);


class Chila extends Base

public Chila (String s)
{
super(s);
   } 

class Text

public static void main(String[] args)

Chila c=new Chila("bb"); 
c.mention();


我想问一下 父类Base的成员变量name是私有的,怎么会被继承呢?如果要是没有被继承,子类 Chila 中super的参数传给了谁?我感觉应该是传给子类的成员变量啊 可是private变量是不能被继承的,而且子类也没有重新写成员变量name啊,谁能帮我解决一下?谢谢了 

解决方案 »

  1.   

    是继承了,但子类不能直接访问,只有super可以访问
      

  2.   

    这个问题经常争论.  说法版本不一..很多书上面的说法也不一样 我的个人观点是.  子类可以继承父类的private方法和private属性.只不过是指些方法和属性子类不可见罢了..  要处理父类的私有属性,只能调用父类的构造方法,因为这些属性是父类私有的, 他的属性交给他自己去初始化是最好的.! 
      

  3.   

    Chila c=new Chila("bb");   会新建两个对象 Base的对象和 Chila的对象  name是父类的成员  public void mention()
    是父类的方法,子类会继承这个方法,所以子类没有继承name,只是访问了父类的name成员
      

  4.   

    是不可以继承,也就是说不能直接通过创建父类对象来访问父类的私有成员变量或方法,只能通过一些非private方法来访问,再通过你访问的方法去调用父类的方法或引用父类的成员变量。
      

  5.   

    父类私有的变量和方法子类是不可能继承的。但是父类自己可以调用,子类可以通过父类非私有的方法来访问父类,让父类自己去处理它的私有方法和私有变量,但是子类是不可以直接调解父类的私有方法和私有变量。子类 Chila 中super方法是父类的中public方法,这样子类就把相关的处理交给父类了,父类自己可以调用自己的私有方法和私有变量(name),再通过c.mention()把父类的私有变量输出出来 ,如果在子类中直接输出name变量,它的值是不变的!
    下面是我实现的一段代码,LZ参考下:package net.csdn.blog.johnston;public class Text { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Chila c=new Chila("bb"); 
    c.mention();
    System.out.println(c.name);
    }}
    class Base { 
    private String name = "base"; 
    public Base()

    name="base"; 
    }
    public Base(String name)
    {
        this.name=name;
    }
    public void mention()

    System.out.println(name);

    } class Chila extends Base { 
    public String name = "chila";
    public Chila (String s)
    {
        super(s);
       } 
    }运行结果:
    bb
    chila
      

  6.   

    第一.子类是可以继承基类所有数据成员的,包括private 类型的。
    第二.super中的参数当然是传递给父类了。