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”
}
}
谁能解释一下。。。 展开
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”
}
}
谁能解释一下。。。 展开
5个回答
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
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
展开全部
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类的属性。父类不能用子类的属性,子类可以继承父类的属性。
而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”
}
}
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”
}
}
因为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”
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询