一般这么用 父类都有getter/setter方法的

解决方案 »

  1.   

    当你new一个Dog类的对象时才会加载public Dog(){}这个构造函数,这时在构造函数中把“小狗”通过调用父类的构造函数赋值给name,实质上是你new的这个Dog类对象的name属性值为“小狗”,而不是父类中的name属性值为“小狗”,不是你理解的那样,但是你这样写的话以后每new一个Dog类的对象name的值都是“小狗”。
      

  2.   

    Dog dog = new Dog();
    System.out.println(dog.name);
    但是这样是错误的啊。在Animal类中name属性是private的,在Dog类中根本就看不到name属性啊。
      

  3.   

    Dog dog = new Dog();
    System.out.println(dog.name);
    但是这样是错误的啊。在Animal类中name属性是private的,在Dog类中根本就看不到name属性啊。
    因为name是private的,所以Dog类继承Animal的时候并没有继承name这个属性,只是在Dog类内部有一个name可以供他使用,这就是继承的特性了,私有的成员变量无法继承,可以使用,但是如果要使用它的话只能通过构造函数来给他赋值或者在Animal类中提供一个set和get方法用来初始化变量和获取变量的值
      

  4.   

    给你写了一个完整点的代码,你看看哪里不懂吧public class Demo{
        public static void main(String args[]){
    Dog dog = new Dog("小狗");
    System.out.println(dog.getName());

    Animal a = new Animal("动物");
    System.out.println(a.getName());

    dog.setName("我是小狗");
    System.out.println(dog.getName());

    a.setName("我是动物");
    System.out.println(a.getName());
    }
    }
    class Animal{
    private String name;
    Animal(){
    }
    Animal(String name){
    this.name = name;
    }
    public void setName(String name){
    this.name = name;
    }
    public String getName(){
    return name;
    }
    }
    class Dog extends Animal{
    Dog(){
    }
    Dog(String name){
    super(name);
    }
    }
    }
      

  5.   

    在JAVA中,我们通常把C中的函数叫做方法。对于子类调用父类的构造方法可以做出如下解释: 子类无条件地继承父类的不含参数的构造方法。
        如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。
        对于父类含参数的构造方法,子类可以通过在自己的构造方法中使用 super 关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句