一个有关继承的问题!!!
我是一个初学者,今有一个有关继承性的问题想请各位高手指教,我定义了两个类一个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




