不能访问封闭的类型实例

我在Eclipse中编写了这个Java接口程序,但在MyTriangle下面有一个红线tmp = new MyTriangle(); 当我运行程序时,我收到此错误:

不能访问Question1类型的封闭实例。 必须使用Question1类型的封闭实例限定分配(例如,xnew A(),其中x是Question1的实例)。

public static void main(String[] args) { MyTriangle tmp = new MyTriangle(); tmp.getSides(); System.out.println(); System.out.println("The area of the triangle is " + tmp.computeArea()); } interface Triangle { public void triangle(); public void iniTriangle(int side1, int side2, int side3); public void setSides(int side1, int side2, int side3); public void getSides(); public String typeOfTriangle(); public double computeArea(); } class MyTriangle implements Triangle { private int side1,side2,side3; public void triangle() { this.side1 = 3; this.side2 = 4; this.side3 = 5; } } 

尝试这个。 为简单起见删除了方法

 public class Test1 { public static void main( String [] args) { MyTriangle h1 = new MyTriangle(); } } class MyTriangle implements Triangle{ int side1; int side2; int side3; public MyTriangle(){ this.side1 = 1; this.side2 = 2; this.side3 = 3; } } interface Triangle{} 

您尚未粘贴完整代码,我认为您的代码应如下所示。

然后,您应该在为三角形创建实例之前为主类创建实例,如下所示

 public class Test{ class MyTriangle { int side1,side2,side3; public MyTriangle() { this.side1 = 3; this.side2 = 4; this.side3 = 5; } } public static void main(String[] args) { MyTriangle h1 = new Test(). new MyTriangle(); // Fix is here** } } interface Triangle{} 

MyTriangle是一个非静态内部类。 这意味着像所有其他实例成员一样,它(和它的实例)属于外部类的实例,而不是类本身。 记得属于一个类需要定义为static东西。

因此,您需要提供一个外部类实例来实例化内部实例

 new OuterClass().new MyTriangle(); 

如果你标记内部类static使它嵌套 ,它将允许你在静态上下文中引用它,如public static main()方法。