当前位置: 技术问答>java相关
一个有关继承的问题!!!
来源: 互联网 发布时间:2015-04-25
本文导语: 我是一个初学者,今有一个有关继承性的问题想请各位高手指教,我定义了两个类一个Animal和他的子类Dog,程序如下: public class Animal { public Animal(String aString) { this.aString=new String(aString); } public void setString(S...
我是一个初学者,今有一个有关继承性的问题想请各位高手指教,我定义了两个类一个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
请各位高手指教我错误之处。
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
请各位高手指教我错误之处。
|
改为aDog.setString("chihuahua");
|
setString不是静态方法,不能用类名直接调用
|
当在一个类中要调用超类的方法的时候,有两种可能性:
第一种,就是通过实例化类来产生对象,然后通过对象句柄来调用方法,如上例中的adog.setString();
第二钟,是一种特殊情况,用类名来调用静态方法,这种方法前以static为标记
所谓静态,就是一种共享机制,如静态变量,在一个程序中无论实例化生成多少对象,在内存中只分得一块内存,这块内存可供所用这种对象访问,所以在调用静态方法和静态变量时可以直接通过类名来调用。
再者,你的类中并没有aString变量,所以用this.aString也是一种错误
第一种,就是通过实例化类来产生对象,然后通过对象句柄来调用方法,如上例中的adog.setString();
第二钟,是一种特殊情况,用类名来调用静态方法,这种方法前以static为标记
所谓静态,就是一种共享机制,如静态变量,在一个程序中无论实例化生成多少对象,在内存中只分得一块内存,这块内存可供所用这种对象访问,所以在调用静态方法和静态变量时可以直接通过类名来调用。
再者,你的类中并没有aString变量,所以用this.aString也是一种错误