java中继承中:父类的private的东西能否被继承?
我用下面这个方法能证明是能继承的吗?
class Animal{
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
class Dog extends Animal{

}
public class Demo {    public Demo() {
    }
    public static void main (String[] args) {
     Dog d=new Dog();
     d.setName("dog");
     System.out.println (d.getName());
    }
    
}d.setName("dog")  明显赋值进去了
如果不能继承  那"dog"往哪搁?
找了很多资料,不晓得是咋回事
顺带问下C#中是可以继承的吧[在winform中利用子类窗体继承父类的窗体证明(父类的私有控件(包含一个容器)是被继承下来了,因为在子类中无法往该容器中拖控件),这里不阐述]

解决方案 »

  1.   

    子类继承的话,就继承了父类的所有属性和方法。
    只是子类中不能直接访问父类的 private 属性和方法,只能访问public的属性和方法。
      

  2.   

    Java中并没有不能继承private。
    只是父类中不能直接访问private这个在所有的面向对象语言中都是一样的。
    子类不能使用 name="Dog"
    只能使用 pubblic 方法
      

  3.   

    被继承但是不能被直接访问,你要是在类Dog中直接写name = "dog"是不行的
      

  4.   

    private的方法和属性是不能被子类继承的
    而你调用的是public方法操作private的属性是可以 这就是封装的意义
    不能直接调用父类的private方法 意思是你不能这样用d.name="dog"和System.out.println(d.name);
    如果属性是protected和public的话就可以直接用d.name = "dog"了
      

  5.   

     d.setName("dog"); 
    调用的是父类中的setName,set的也是父类里的name
    测试一下
    public class Demo {      public Demo() { 
        } 
        public static void main (String[] args) { 
        Dog d=new Dog(); 
        d.setName("dog"); 
        System.out.println (d.getName());
        System.out.println(d.getClass().getDeclaredFields().length);
        } 
        

    结果
    dog
    0
    说明DOG类中没有任何字段,所以说并不是说DOG里面有一个name,而是Set进它的父类的name
      

  6.   

    其实继承的机制是new子类的时候同时开辟了父类对象的空间,但子类不能访问父类的private方法和属性
    所以都说不能继承private的属性和方法
      

  7.   

    你在子类中用d.name = "dog"试试再说
      

  8.   

    new子类的时候同时开辟了父类对象的空间
    也就是子类中包含了父类
    但private继承下来了不能使用
      

  9.   

    如果不能继承  那"dog"往哪搁? 
    怎么就没有人回答呢?
      

  10.   

    因为父类的属性是private的 在类外不可以访问 所以只能通过public的set和get方法来操作这个属性
    再用的时候就可以直接认为它是不能被继承的就行了
      

  11.   

    不是都说了吗,往父类的的name字段里搁,只能通过父类的public String getName()访问父类中的private name字段 
      

  12.   

    哈哈...有意思
    new的子类对象  怎么放父类里了
      

  13.   

    LZ没必要想那么多,记住不能直接访问private属性或方法就行了,要通过public的方法访问
      

  14.   

    不被继承只是从访问权限上说的,new Dog的时候,这个对象会开辟一段空间,这段空间包括父类的所有成员变量,只不过如果这些变量用private修饰的话,就不能直接访问,得通过方法操作。你想想你就new了一个Dog对象,而Dog对象什么都没定义,如果没有父类的成员区域,它岂不是一个空的?
      

  15.   

    没说你同时开辟了父类空间吗 并不是说继承了Animal你就真的有了他的方法和属性 调用的set方法就是操作父类的属性
    public class TestA {
    public static void main(String[] args) {
    Dog d = new Dog();
    d.setName("dog");
    System.out.println(d.getName());
    System.out.println(d.name);
    }
    }
    class Animal{
    private String name; public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }

    }
    class Dog extends Animal{
    public String name;
    }
    输出 dog
         null
    Dog类中的属性并没有被赋值
      

  16.   

    子类 extends 父类 所有的属性和方法!只是对父类的pricate 没有访问权!所以要提供相应的get和set
    方法!然后提供一个默认无参的构造方法成为一个JavaBean!
      

  17.   

    Java中好像除了构造方法不能被继承之外,其它的属性、方法都能被子类继承,能不能直接访问其属性和方法就得看访问控制符了。
      

  18.   

    建议好好看一下java对象在内存中是怎么使用的。
      

  19.   

    此题体现了封装的意义!
    不能让其他类来直接调用或更改animal中的私有属性,而只能通过调用其public的set和get方法来进行animal中私有属性的操作