最近问朋友这样一个问题,得到的答案,居然是不能。网上一查,原来很多人的观点是不可以,晕了。。
  我用debug跟踪了一下,子类中有父类的私有属性,但是不能访问。。
  代码是这样的:
    public class Test {
      public static void main(String[] args) {  //在这个地方设置一个断点
Dog dog=new Dog();
     }
    }
   class Animal{
private String name="zhangsan";
private void show(){

}
    }
  class Dog extends Animal{
public void eat(){

}
   }
  用debug启动这个程序,点击下一步:
 就可以查看dog的属性,它里面就有一个属性值:
 dog
  name "zhangsan" (id=21)当然对于它为什么不能被访问,我的理解是这样的:子类可以继承所有父类的属性与方法,但是访问牵涉到权限,这个name是只有父类可以访问的,不知道这样回答有没有错

解决方案 »

  1.   

    不要花费时间纠结在这种问题上,只需要知道 private 修饰过的成员变量、内部类、方法仅能在当前类中访问,至于其他的类,不管是子类,还是同包中的类,或者是其他的类都不允许访问。
      

  2.   

    我觉得应该不能,在java中private的东东仅在本类有效
      

  3.   

    public,protected,private本来就用来修饰访问权限的...
    你可以试下在子类Dog中重新声明个String name;
    然后你去看看Dog拥有的是两个name, 一个是自己声明的, 一个是继承父类的..
    所谓继承, 当然是继承父类的一切.你继承了父类的那个String name, 但是自己却没有访问权限,Dog拥有了两个, 但这两个与父类已经没有关系了, 对他们的修改都影响不了父类的name;
    大概应该是这样子...
    如果有错..望高手指出..
      

  4.   

    有在Dog类里面,但是不能直接访问,原因是“private、protected、public”都有是针对类级别的访问限制,不是针对对象级别的,所以你如果代码改成这样,就可以访问Dog对象中的name了。
    public class Test {
    public static void main(String[] args) {  //在这个地方设置一个断点 
    Dog dog=new Dog(); 


    class Animal{ 
    private String name="zhangsan"; 
    private void show(){System.out.println(name);} 
    public void call(){
    show();
    }

    class Dog extends Animal{ 
    public void eat(){
    call();


      

  5.   

    请问怎么让它把拷贝的私有属性显示出来?
    怎么查看Dog的属性?