No enclosing instance of type testmain is accessible. Must qualify the allocation with an enclosing instance of type testmain (e.g. x.new A() where x is an instance of testmain).
出错的原因:main函数是静态的,不能调用动态的内部类。
出错的代码如下:
package testpackeg;
public class testmain {
abstract class Computer
{
public abstract void use();
}
class Windows extends Computer
{
@Override
public void use()
{
System.out.println("windows");
}
}
class Linux extends Computer
{
public void use()
{
System.out.println("linux");
}
}
class Person
{
Computer com;
void useMyComputer()
{
com.use();
}
}
public static void main(String[] args)
{
Computer w=new Windows();
Computer l=new Linux();
Person p1=new Person();
p1.com=w;
Person p2=new Person();
p2.com=l;
p1.useMyComputer();
p2.useMyComputer();
}
}
第一种解决方法:
把内部类改为外部类。内部类是指定义在一个类中的类。在出错代码中,computer、windows都定义在了testmain类中。将这些类挪出去就行了。
修改后的代码
package testpackeg;
abstract class Computer
{
public abstract void use();
}
class Windows extends Computer
{
@Override
public void use()
{
System.out.println("windows");
}
}
class Linux extends Computer
{
public void use()
{
System.out.println("linux");
}
}
class Person
{
Computer com;
void useMyComputer()
{
com.use();
}
}
public class testmain {
//把原来在这里定义的类挪走了
public static void main(String[] args)
{
Computer w=new Windows();
Computer l=new Linux();
Person p1=new Person();
p1.com=w;
Person p2=new Person();
p2.com=l;
p1.useMyComputer();
p2.useMyComputer();
}
}
第二种解决方法:
在定义的类前面加上static,将动态内部类变成静态的。
package testpackeg;
public class testmain {
abstract static class Computer//前面加了abstract修饰
{
public abstract void use();
}
static class Windows extends Computer
{
@Override
public void use()
{
System.out.println("windows");
}
}
static class Linux extends Computer
{
public void use()
{
System.out.println("linux");
}
}
static class Person
{
Computer com;
void useMyComputer()
{
com.use();
}
}
public static void main(String[] args)
{
Computer w=new Windows();
Computer l=new Linux();
Person p1=new Person();
p1.com=w;
Person p2=new Person();
p2.com=l;
p1.useMyComputer();
p2.useMyComputer();
}
}