我制作了一个Sphere
类,其中包含一些函数。然后,我制作了一个MultiSphere
类,充当“驱动程序类”。我将Sphere
类放在驱动程序类中(这是您应该如何使用类/驱动程序类?),现在看来我在尝试访问Sphere.diameter
变量时遇到错误,因为它首先要通过Multisphere
类。
我的IDE说
Multisphere.this cannot be referenced from a static context
我得到了错误
non-static variable this cannot be referenced from a static context
当我尝试在最后一行创建我的Sphere
类的新实例时:
Sphere circle = new Sphere(15);
完整代码:
import java.util.Scanner;
import java.lang.Math;
public class MultiSphere {
public class Sphere {
// Instance Variables
double diameter;
// Constructor Declaration of Class
private Sphere(double diameter) {
this.diameter = diameter;
}
private double getDiameter() {
System.out.printf("Diameter is %f \n", diameter);
return diameter;
}
// Allows user to modify the diameter variable
private double setDiameter() {
System.out.print("Enter the diameter for the sphere: \n");
this.diameter = new Scanner(System.in).nextDouble();
return diameter;
}
private void Volume() {
double radius = diameter / 2;
double volume = (4 * Math.PI * Math.pow(radius, 3)) / 3;
System.out.printf("The volume of the sphere is: %f \n", volume);
}
private void surfaceArea() {
double radius = diameter / 2;
double surfaceArea = 4 * Math.PI * Math.pow(radius, 2);
System.out.printf("The surface area is: %f \n", surfaceArea);
}
}
public static void main(String[] args) {
System.out.printf("Hello World");
Sphere circle = new Sphere(15);
}
}
答案 0 :(得分:1)
这里的问题是Sphere
是一个非静态内部类。这意味着您需要MultiSphere
的实例才能访问它:
MultiSphere ms = new MultiSphere();
Sphere s = new ms.Sphere();
或者,您可以将Sphere
类设为静态:
public static class Sphere {
最后,您可以将这些类放入分别名为MultiSphere.java
和Sphere.java
的两个文件中。就个人而言,我更喜欢这个。
答案 1 :(得分:-2)
您必须将私有范围更改为公共范围。
private Sphere(double diameter) {
this.diameter = diameter;
}
喜欢
public Sphere(double diameter) {
this.diameter = diameter;
}
除非您在同一个类中调用私有构造函数,否则没有意义。