java中子类与父类成员变量重名的问题

classAnimal{protectedStringname="mimi";publicStringgetName(){returnname;}}classCatext... 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”
}
}

谁能解释一下。。。
展开
 我来答
匿名用户
2013-07-27
展开全部
Cat c1 = new Cat("pipi");
System.out.println(c1.getName()); // 返回“mimi”
因为,有继承关系的两个类是这样的,最终new出来的子类的对象的内部会有一个父类对象,在这里也就是说,这Cat对象的内部包含有一个Animal对象,而且Cat类中并没有定义getName()方法,换句话说就是没有重写父类Animal的getName()方法,所以c1.getName(),表面上看,我们总是说此方法是继承下来的
,所以在Cat类中没有定义,但是可以使用,这只是表面上这么理解,实际上内存中是什么样?就是我上面说的那样,Cat对象的内部还有一个Animal对象,所以c1.getName()的时候,实际上是调用的它里面的那个父类Animal对象的getName()方法,而Animal类中定义的getName()是return name;注意,return的这个name指的是自己Animal的name,对吧,所以打印出mimi
xxx355200
推荐于2018-03-11 · TA获得超过220个赞
知道答主
回答量:112
采纳率:76%
帮助的人:19.6万
展开全部
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类的属性。父类不能用子类的属性,子类可以继承父类的属性。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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”
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-27
展开全部
子类拥有除父类的private的方法和成员变量。
当子类的对象调用继承父类的方法时,用的是父类的对象;当调用自己的方法时,用的是自己的方法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
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”
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式