我知道这个问题已经被问了很多次,而且我已经阅读了很多答案,但我无法理解如何解决我的问题。这是我的代码:
public class Circle
{
public int diameter;
public int xPosition;
public int yPosition;
public String color;
public Circle()
{
diameter = 30;
xPosition = 20;
yPosition = 60;
color = "blue";
}
public void toString()
{
System.out.println("The diameter of the circle is " + Circle.diameter);
System.out.println("The x position of the circle is " + Circle.xPosition);
System.out.println("The y position of the circle is " + Circle.yPosition);
System.out.println("The colour of the circle is " + Circle.color);
}
public static void main(String[] args)
{
Circle c1 = new Circle();
c1.toString();
}
}
我最初通过更改来解决问题:
public class Circle
{
public int diameter;
public int xPosition;
public int yPosition;
public String color;
}
到
public class Circle
{
public static int diameter;
public static int xPosition;
public static int yPosition;
public static String color;
}
虽然这确实有效,但我觉得这不是一个好方法。我已经阅读了一些关于实例变量的内容,但我不知道该怎么做。
感谢。
答案 0 :(得分:7)
问题在于toString()
功能:
System.out.println("The diameter of the circle is " + Circle.diameter);
System.out.println("The x position of the circle is " + Circle.xPosition);
System.out.println("The y position of the circle is " + Circle.yPosition);
System.out.println("The colour of the circle is " + Circle.color);
您正在引用带有Class引用的非静态变量。只需将Circle
替换为this
即可。看看Understanding Instance and Class member
教程
修改强>
奇怪的是,它不会让我使用名称toString()因为 “Circle中的toString()不能覆盖对象中的toString()”。有用 除了任何其他名称
是的,因为toString()
方法是在Object
类中声明的,它是所有java类的超类。此方法的返回类型为String
,而您使用的是void
。因此,您必须将返回类型更改为String
或将函数名称更改为其他任何内容。
答案 1 :(得分:0)
由于静态变量和方法是连接到类本身而不是它的实例 所以他们使用类名调用:
=============================================== =================================
class ABC{
public static int a;
public void A()
{
System.out.println("The value of a is: "+a);
}
public class test
{
ABC.a = 10;
ABC.A();
}
您无需将变量更改为静态变量。
只需使用this
运算符调用变量即可。