今天在编译Java程序的时候出现以下错误:
No enclosing instance of type Main is accessible. Must qualify the allocation with an enclosing instance of type Main (e.g. x.new A() where x is an instance of Main).
我原来编写的源代码是这样的:
public class Main
{
class Dog //定义一个“狗类”
{
private String name;
private int weight;
public Dog(String name, int weight)
{
this.setName(name);
this.weight = weight;
}
public int getWeight()
{
return weight;
}
public void setWeight(int weight)
{this.weight = weight;}
public void setName(String name)
{this.name = name;}
public String getName()
{return name;}
}
public static void main(String[] args)
{
Dog d1 = new Dog("dog1",1);
}
}
出现这个错误的时候,我一直不太理解。
在借鉴别人的解释之后才恍然大悟。
在代码中,我的Dog类是定义在Main中的内部类。Dog内部类是动态的内部类,而我的main方法是static静态的。
就好比静态的方法不能调用动态的方法一样。
有两种解决办法:
第一种:
将内部类Dog定义成静态static的类。
第二种:
将内部类Dog在Main类外边定义。
修改后的代码:
第一种:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
public class Main { public static class Dog { private String name; private int weight; public Dog(String name, int weight) { this .setName(name); this .weight = weight; } public int getWeight() { return weight; } public void setWeight( int weight) { this .weight = weight;} public void setName(String name) { this .name = name;} public String getName() { return name;} } public static void main(String[] args) { Dog d1 = new Dog( "dog1" , 1 ); } } |
第二种:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
public class Main { public static void main(String[] args) { Dog d1 = new Dog( "dog1" , 1 ); } } class Dog { private String name; private int weight; public Dog(String name, int weight) { this .setName(name); this .weight = weight; } public int getWeight() { return weight; } public void setWeight( int weight) { this .weight = weight;} public void setName(String name) { this .name = name;} public String getName() { return name;} }
|