我需要在其它类中调用内部类,为什么当内部类没有static时可以通过外部类的“ 实例.new 内部类();”得到内部类对象,但是当将内部类设为static时这句就出错了呢?
正确示例
静态内部类 不需要 new 来实例化,直接 类引用 或 类对象来引用
创建静态内部类对象,可以使用这种语法格式来创建:
外部类名.静态内部类名 变量名 = new 外部类名.静态内部类名(); (引用自参考链接)
测试代码如下:
参考链接:
package testinner;
public class TestInner {
public static void main(String[] args) {
// TODO Auto-generated method stub
// https://blog.csdn.net/legendaryhaha/article/details/83066691
// https://zhuanlan.zhihu.com/p/604272550
// 创建静态内部类使用这种语法格式:外部类名.静态内部类名 变量名 = new 外部类名.静态内部类名()
Outer.Inner inner01 = new Outer.Inner();
inner01.sayHello();
}
}
class Outer{
static class Inner{
void sayHello() {
System.out.println("Hello!");
}
}
}
在Java中,静态内部类和非静态内部类之间存在一些区别,这导致了在调用方式上的差异。
静态内部类的特点: 1. 静态内部类是独立于外部类的存在,即使没有外部类的对象,也可以直接访问静态内部类。 2. 静态内部类的对象不会自动持有外部类的引用。 3. 静态内部类可以直接通过外部类.内部类
的方式来创建对象。
非静态内部类的特点: 1. 非静态内部类是依赖于外部类存在的,不能独立存在。 2. 非静态内部类的对象会自动持有外部类的引用。 3. 非静态内部类只能通过外部类的对象来创建对象,即外部类对象.new 内部类()
。
基于以上的特点,我们可以得出以下解释:
当内部类没有static
修饰时,它是依赖于外部类的存在的,需要通过外部类的对象来访问和创建。因此,我们需要先创建外部类的对象,然后再通过此对象来创建内部类的对象。
对于静态内部类,它是独立于外部类的存在,可以直接通过外部类.内部类
的方式来创建对象。所以,在调用静态内部类时,应该使用外部类.内部类
的语法来创建对象,而不能通过创建外部类对象的方式来调用静态内部类。
所以,在你的错误示例中,外部类.内部类 内部对象 = new 外部类.内部类();
这段代码会出错,因为静态内部类不依赖于外部类的对象,无法通过创建外部类对象的方式来调用静态内部类。
正确的示例中的代码 外部类.内部类 内部对象 = 外部对象.new 内部类();
能够成功运行,因为这是创建非静态内部类对象的正确方式,在实例化内部类对象之前,我们需要先创建外部类的对象。
总结一下: - 如果内部类是非静态的,可以通过实例化外部类对象来获得内部类对象。 - 如果内部类是静态的,则应该使用外部类.内部类
的方式来创建内部类对象。