类型的封闭实例不可访问。

7 浏览
0 Comments

类型的封闭实例不可访问。

这个问题已经有答案了:

Java中的内部类和静态嵌套类

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

类型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;
  } 
}

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

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{}

0
0 Comments

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

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

new OuterClass().new MyTriangle();

如果将内部类标记为static,则它将嵌套,这将允许您在静态上下文中引用它,如公共静态main()方法。

0