CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

一个有关继承的问题!!!

楼主vbdelphi(小笨笨)2002-03-26 15:51:56 在 Java / J2SE / 基础类 提问

我是一个初学者,今有一个有关继承性的问题想请各位高手指教,我定义了两个类一个Animal和他的子类Dog,程序如下:  
  public   class   Animal  
  {  
  public   Animal(String   aString)  
  {  
  this.aString=new   String(aString);  
  }  
  public     void     setString(String   newString)  
  {  
  this.aString=newString;  
  }  
   
  public   String   toString()  
  {  
  return   "this   is   a   "+aString;  
  }  
  private   String   aString;  
  }  
  Dog类:  
  public   class   Dog   extends   Animal  
  {  
  public   Dog(String   aName)  
  {  
  super("Dog");  
  this.aName=aName;  
  aBreed="Unknown";  
  }  
  public   Dog(String   aName,String   aBreed)  
  {  
  super("Dog");  
  this.aName=aName;  
  this.aBreed=aBreed;  
  }  
  private   String   aName;  
  private   String   aBreed;  
  }  
  并且我写了一个很简单的测试程序如下:  
  public   class   TryDog  
  {  
  public   static   void   main(String[]   args)  
  {  
  Dog   aDog=new   Dog("fido","chihuahua");  
  Dog   starDog=new   Dog("Lassie");  
  Dog.setString("chihuahua");  
  System.out.println(aDog);  
  System.out.println(starDog);  
  }  
  }  
  现在问题是:我现在编译产生错误,信息如下:  
  TryDog.java:7:   non-static   method   setString(java.lang.String)   cannot   be   reference  
  d   from   a   static   context  
                                  Dog.setString("chihuahua");  
                                        ^  
  1   error  
  请各位高手指教我错误之处。 问题点数:20、回复次数:8Top

1 楼wwangl(???)回复于 2002-03-26 15:59:30 得分 10

改为aDog.setString("chihuahua");Top

2 楼javalearner(闲人)回复于 2002-03-26 16:01:33 得分 0

setString不是静态方法,不能用类名直接调用。Top

3 楼baozhen(零度)回复于 2002-03-26 16:53:20 得分 0

在Animal类中这样声明:  
    public   static   String   toString()  
          {  
                  return   "this   is   a   "+aString;  
          }  
  Top

4 楼pdev(达子)回复于 2002-03-26 17:03:26 得分 0

同意wwangl(???)和javalearner()   (     )    
  Top

5 楼hellenlong(海龙)回复于 2002-03-26 17:07:31 得分 5

setString不是静态方法,不能用类名直接调用Top

6 楼gflei(学而实习之)回复于 2002-03-26 17:37:35 得分 0

上面讲的是两种解决办法,都能解决问题,但效果不同,学一阵你就会明白的。  
   
  不过根据你的想法应该先安照第一种改法。Top

7 楼OciveJyq(老顽童)回复于 2002-03-27 22:38:43 得分 5

当在一个类中要调用超类的方法的时候,有两种可能性:  
    第一种,就是通过实例化类来产生对象,然后通过对象句柄来调用方法,如上例中的adog.setString();  
    第二钟,是一种特殊情况,用类名来调用静态方法,这种方法前以static为标记  
  所谓静态,就是一种共享机制,如静态变量,在一个程序中无论实例化生成多少对象,在内存中只分得一块内存,这块内存可供所用这种对象访问,所以在调用静态方法和静态变量时可以直接通过类名来调用。  
  再者,你的类中并没有aString变量,所以用this.aString也是一种错误Top

8 楼karmaho(karma)回复于 2002-03-28 14:41:09 得分 0

写的好!!Top

相关问题

  • 一个有关继承的问题!
  • 有关继承涵数的问题!
  • 问一个有关继承的问题
  • 有关代码重用的问题,对Form的继承。
  • 有关类继承问题,请大虾帮忙!
  • override.......有关类的继承和多态的一些疑问。。。。。。>>>>>>>>>>
  • 请教有关public/protect/private三种继承方式
  • 有关多重继承下的virtual function一问
  • 有关可视化继承的问题(VB。NET窗体)?
  • 翻译一段话(有关虚拟多重继承)

关键词

  • 内存
  • abreed
  • dog
  • astring
  • 调用
  • adog
  • aname
  • 静态
  • chihuahua
  • 类

得分解答快速导航

  • 帖主:vbdelphi
  • wwangl
  • hellenlong
  • OciveJyq

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo