我在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;
}
}
答案 0 :(得分:16)
MyTriangle
是一个非静态的内部类。这意味着像所有其他实例成员一样(&它的实例)属于外部类的实例而不是类本身。请记住属于某个类需要定义为static
。
因此,您需要提供一个外部类实例来将内部实例实例化为
new OuterClass().new MyTriangle();
如果您标记内部类static
,使其嵌套,它将允许您在静态上下文中引用它,如公共静态main()
方法。
答案 1 :(得分:9)
试试这个。为简单起见删除了方法
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{}