初学java一题,请教!

study2002 2008-01-21 11:51:24
class Anmial
{
int height=100,weight;
void eat()
{
System.out.println("Anmial height:"+height);
System.out.println("Anmial eat!");
}
void sleep()
{
System.out.println("Anmial sleep!");
}


}

class Fish extends Anmial
{
int height=200;
/* void eat()
{
//System.out.println("Fish height:"+height);
System.out.println("Fish eat!");
}*/
}

class TestExtends
{
public static void main(String[] args)
{
Anmial an=new Anmial();
Fish fh=new Fish();
fh.height=300;
fh.eat();
}
}

=========================
为什么结果中height不是等于300,变量不继承吗?
...全文
145 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dracularking 2008-01-21
  • 打赏
  • 举报
回复

Fish fh = new Fish();
fh.height = 300;
fh.eat();

调用的是父类的eat方法(因为子类没有) 改变的是子类对象的height属性


Anmial fh = new Fish();
fh.height = 300;
fh.eat();

变量无多态(父类方法中调用的就是父类的对象属性) 但改变的是父类对象的属性 因此输出300
runshine 2008-01-21
  • 打赏
  • 举报
回复
2楼...你那么一改就不是LZ想要的问题了


class Anmial
{
int height=100,weight;
void eat()
{
System.out.println("Anmial height:"+height);
System.out.println("Anmial eat!");
}
void sleep()
{
System.out.println("Anmial sleep!");
}


}

class Fish extends Anmial
{
//public int height=200; //这里注释掉
}

public class TestExtends
{
public static void main(String[] args)
{
Anmial an=new Anmial();
Fish fh=new Fish();
fh.height=300;
fh.eat();
}
}


LZ,变量是可以继承的,但是你的代码是fish重写了height,而fh.eat(); 的eat()方法继承自Anmial,其操作的变量是Anmial里的变量,也就是说现在有两个height,分别属于fish和anmial,它们是不同的.
ZHOUJIAOSHOU 2008-01-21
  • 打赏
  • 举报
回复
看来你是初学啊,给你绍一些视频资源,这里包含了视频,PPT课件,还有源代码,挺不错的,有时间多看看.

"快速掌握Java[孙鑫](视频+源码+PPT)"系列视频教程的下载! 全部共24个资源,教程包括视频,PPT课件,源代码,刚刚全部上传完毕,有兴趣的朋友可以下载. 免费下载!


快速掌握Java[孙鑫](视频+源码+PPT)01

快速掌握Java[孙鑫](视频+源码+PPT)02

快速掌握Java[孙鑫](视频+源码+PPT)03

快速掌握Java[孙鑫](视频+源码+PPT)04

快速掌握Java[孙鑫](视频+源码+PPT)05

快速掌握Java[孙鑫](视频+源码+PPT)06

快速掌握Java[孙鑫](视频+源码+PPT)07

快速掌握Java[孙鑫](视频+源码+PPT)08

快速掌握Java[孙鑫](视频+源码+PPT)09

快速掌握Java[孙鑫](视频+源码+PPT)10

快速掌握Java[孙鑫](视频+源码+PPT)11

快速掌握Java[孙鑫](视频+源码+PPT)12

快速掌握Java[孙鑫](视频+源码+PPT)13

快速掌握Java[孙鑫](视频+源码+PPT)14

快速掌握Java[孙鑫](视频+源码+PPT)15

快速掌握Java[孙鑫](视频+源码+PPT)16

快速掌握Java[孙鑫](视频+源码+PPT)17

快速掌握Java[孙鑫](视频+源码+PPT)18

快速掌握Java[孙鑫](视频+源码+PPT)19

快速掌握Java[孙鑫](视频+源码+PPT)20

快速掌握Java[孙鑫](视频+源码+PPT)21

快速掌握Java[孙鑫](视频+源码+PPT)22

快速掌握Java[孙鑫](视频+源码+PPT)23

快速掌握Java[孙鑫](视频+源码+PPT)24

还需更多资源请访问:http://download.csdn.net/user/ZHOUJIAOSHOU
ZHOUJIAOSHOU 2008-01-21
  • 打赏
  • 举报
回复

写成这样就好了,你注释掉了.

class Anmial
{
int height=100,weight;
void eat()
{
System.out.println("Anmial height:"+height);
System.out.println("Anmial eat!");
}
void sleep()
{
System.out.println("Anmial sleep!");
}


}

class Fish extends Anmial
{
int height=200;
void eat()
{
System.out.println("Fish height:"+height);
System.out.println("Fish eat!");
}
}

class TestExtends
{
public static void main(String[] args)
{
Anmial an=new Anmial();
Fish fh=new Fish();
fh.height=300;
fh.eat();
}
}
yuanqingfei 2008-01-21
  • 打赏
  • 举报
回复
记住一句话: 变量和static的方法没有多态 的说。。
yuanqingfei 2008-01-21
  • 打赏
  • 举报
回复
结果是100,因为用的是父类的方法,父类的方法用的又是父类的变量,而不是子类新赋值的变量。。。。至于为什么,请参照一楼
study2002 2008-01-21
  • 打赏
  • 举报
回复
我运行的结果是100,不是300,所以我就不明白为什么不是300!
sdo281158060 2008-01-21
  • 打赏
  • 举报
回复
LZ 怎么说不是300呢?结果本来就是300,至于解释见上面的

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧