【问题标题】:No enclosing instance of type is accessible [duplicate]没有封闭的类型实例是可访问的[重复]
【发布时间】:2013-09-12 12:02:15
【问题描述】:

我在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;
  } 
}

【问题讨论】:

  • 这不是你的整个程序,我怀疑它都包含在一个名为 Question1 的文件和类中,对吗?
  • 你在你的接口中定义了一堆你没有在子类中实现的方法。
  • 这不是我的全部程序。并且正确!一切都在 Question1.java
  • 请处理您的 oops 概念。您的代码还有其他缺陷。
  • 试试我的第二部分代码,如果它解决了你的问题,请告诉我,真的想知道为什么它被否决

标签: java


【解决方案1】:

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

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();
【解决方案2】:

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

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

new OuterClass().new MyTriangle();

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

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 1970-01-01
    • 2018-05-12
    • 2016-02-14
    • 2013-02-17
    • 2012-03-24
    • 2011-12-15
    • 2016-11-20
    相关资源
    最近更新 更多