没有可访问的类型封闭实例。

8
我在Eclipse中编写了这个Java接口程序,但是在MyTriangle tmp = new MyTriangle();下面有一条红线,并且当我运行程序时,会出现以下错误:

类型Question1的封闭实例不可访问。 必须使用类型Question1的封闭实例限定分配(例如,在Question1的实例x.new 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;
  } 
}

你在接口中定义了一堆方法,但是在子类中没有实现它们。 - Kon
那不是我的整个程序。没错!所有的东西都在Question1.java文件中。 - user1896464
请加强你的面向对象编程概念。你的代码有其他缺陷。 - aksappy
1
请尝试我的代码的第二部分,如果可以解决你的问题,请告诉我。我真的很想知道为什么它被投票否决了。 - upog
我也在想同样的问题。那就是我一直在寻找的东西。谢谢!我所需要做的就是这样:MyTriangle tmp = new Question1().new MyTriangle(); - user1896464
显示剩余2条评论
2个回答

21

MyTriangle是一个非静态内部类。这意味着像所有其他实例成员一样,它(及其实例)属于外部类的一个实例,而不是类本身。要属于类,必须将事物定义为static

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

new OuterClass().new MyTriangle();
如果您将内部类标记为 static,它就会成为一个嵌套类,这样可以在静态上下文中引用它,比如公共的静态 main() 方法。

10

试试这个。为了简化,已经去掉了方法。

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 tmp = new Question1().new MyTriangle(); - user1896464

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接