Dog dog = new Dog(); System.out.println(dog.name); 但是这样是错误的啊。在Animal类中name属性是private的,在Dog类中根本就看不到name属性啊。
Dog dog = new Dog(); System.out.println(dog.name); 但是这样是错误的啊。在Animal类中name属性是private的,在Dog类中根本就看不到name属性啊。 因为name是private的,所以Dog类继承Animal的时候并没有继承name这个属性,只是在Dog类内部有一个name可以供他使用,这就是继承的特性了,私有的成员变量无法继承,可以使用,但是如果要使用它的话只能通过构造函数来给他赋值或者在Animal类中提供一个set和get方法用来初始化变量和获取变量的值
给你写了一个完整点的代码,你看看哪里不懂吧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());
System.out.println(dog.name);
但是这样是错误的啊。在Animal类中name属性是private的,在Dog类中根本就看不到name属性啊。
System.out.println(dog.name);
但是这样是错误的啊。在Animal类中name属性是private的,在Dog类中根本就看不到name属性啊。
因为name是private的,所以Dog类继承Animal的时候并没有继承name这个属性,只是在Dog类内部有一个name可以供他使用,这就是继承的特性了,私有的成员变量无法继承,可以使用,但是如果要使用它的话只能通过构造函数来给他赋值或者在Animal类中提供一个set和get方法用来初始化变量和获取变量的值
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);
}
}
}
如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。
对于父类含参数的构造方法,子类可以通过在自己的构造方法中使用 super 关键字来调用它,但这个调用语句必须是子类构造方法的第一个可执行语句