第1个回答 推荐于2018-03-11
cat类继承了animal,在cat中只有构造方法,没有get方法。所以System.out.println(c1.getName()); // 返回“mimi” 调用了父类的方法
而System.out.println(c1.name); // 返回“pipi”,直接调用的是cat的构造方法。
Animal c2 = (Animal)c1;
System.out.println(c2.name); c2是animal类,所以只能用animal类的属性。父类不能用子类的属性,子类可以继承父类的属性。本回答被网友采纳
第2个回答 2017-09-10
class Animal {
protected String name= "mimi";
public String getName() { return name;}
}
class Cat extends Animal{
// String name; ///////////////这
Cat(String name) {
this.name = name;
}
}
public class Test3 {
public static void main(String[] args) {
Cat c1 = new Cat("pipi");
System.out.println(c1.getName()); // 返回“mimi”
System.out.println(c1.name); // 返回“pipi”
Animal c2 = (Animal)c1;
System.out.println(c2.name); // 返回“mimi”
}
}
第3个回答 2013-07-27
子类拥有除父类的private的方法和成员变量。
当子类的对象调用继承父类的方法时,用的是父类的对象;当调用自己的方法时,用的是自己的方法。
第4个回答 2013-07-27
我跟上面的看法有些不同。
因为new出一个之类的对象时,内存中会保存一个父类的对象。所以父类对象中有共有的属性,而之类中也有子类自己的属性。
如果改成下面这样就全行了。
class Animal
{
protected String name= "mimi";
public Animal(String name)
{
this.name=name;
}
public String getName()
{
return this.name;
}
}
class Cat extends Animal
{
String name;
Cat(String name)
{
super(name);
this.name = name;
}
}
public class Test3
{
public static void main(String[] args)
{
Cat c1 = new Cat("pipi");
System.out.println(c1.getName()); // 返回“pipi”
System.out.println(c1.name); // 返回“pipi”
Animal c2 = (Animal)c1;
System.out.println(c2.name); // 返回“pipi”
}
}