一、静态内部类与非静态内部类的区别
1.静态内部类只能访问外部类的静态成员和方法
2.静态内部类不能访问外部类的非静态成员变量和非静态方法。他只 能访问外部类的静态成员和静态方法,非静态内部类能够访问外部类的静 态和非静态成员和方法 3.静态内部类不依赖外部类实例而被实例化,但非静态内部类需要在外部类实例化后才可以被实例化 4.静态内部类不需要持有外部类的引用,但非静态内部类需要持有外部类的引用
/**
* @title: OuterClass.java
* @package firstchapter
* @description: TODO
* @author: 梁树鹏
* @date: 2022年1月1日 上午9:53:35
* @version: V1.0
*/
public class OuterClass {
private static String msg = "static attribute";
private String msg1 = "no - static attribute";
// 静态内部类
public static class StaticInnerClass {
// 静态内部类只能访问外部类的静态成员
public void printMessage() {
// 试着将 msg 改成非静态的,这将导致编译错误
System.out.println("Message from inner static class: " + msg);
}
}
// 非静态内部类
public class InnerClass {
// 不管是静态方法还是非静态方法都可以在非静态内部类中访问
public void display() {
System.out.println("Message from non-static inner class: "+ msg);
System.out.println("Message from non-static inner class: "+ msg1);
}
}
public static void main(String args[]) {
// 创建静态内部类的实例
StaticInnerClass printer = new StaticInnerClass();
// 静态内部类只能访问外部类的静态成员和静态方法
printer.printMessage();
// 创建非静态内部类
InnerClass inner = new OuterClass().new InnerClass();
// 非静态内部类不管是静态方法还是非静态方法都可以在非静态内部类中访问
inner.display();
}
}