- 在一个类里面定义了另一个类,在外部实例化该类的时候提示上面的错误,具体分析理解如下:
先上示例代码:
public class A{
public class B{
}
}
在A类中定义s了一个新的类B。
要创建一个A实例,错误的方法是:
A.B b= new A.B(); //编译提示 is not an enclosing class (B不是一个封闭类)
正确的方法:
A a = new A();
A.B b = a.new B();
或者
A.B b = new A().new B();
具体分析:
定义的B类不是静态的内部类,不能通过直接通过A.B()直接构建,要想实例化B类,先实例化A类,拿到A类对象的实例再实例化B类。
2.可以修改上面的代码,把B类定义为静态类:
public class A {
public static class B {
public void fb(){
}
}
}
这个时候再就是正确的:
A.B b= new A.B();
注意:
Java中的关于public类有一些规则,都会有一句话是“在一个java文件中只能有一个public修饰的类,并且类名需要和文件同名”。上面的A, B类虽然都是public修饰,但是B类是A类内部定义的一个类,和类A不在同一个级。
如下代码在 A.java文件中会提示错误
public class A {
public static class B {
public void fb() {
}
}
}
public class C{
}
应该将C类的public限定符去掉
public class A {
public static class B {
public void fb() {
}
}
}
class C{
}
java同一个文件包含多个类注意事项
1.Java保存的文件名必须与类名一致
2.如果文件中只有一个类,文件名必须与类名一致
3.一个Java文件中只能有一个public类
4.如果文件中不止一个类,文件名必须与public类名一致
5.如果文件中不止一个类,而且没有public类,文件名可与任一类名一致