内部类和静态内部类

定义在一个类内部的类叫内部类,该类叫外部类。
外部类可以用常规的类访问方式,访问内部类的所有方法和属性,且外可以访问内部类的私有方法和属性。
内部类的标识符:每个类都有一个:类名.class文件,但内部类的名字是:外部类$内部类.class


1.实例化
内部类: 外部类 a = new 外部类(); //内部类更像是外部类的一个属性
外部类.内部类 str = a.new 内部类();
静态内部类:外部类.静态内部类 str = new 外部类.静态内部类();
且静态内部类可以有静态的成员和方法,而内部类不能有静态的成员和方法。

2.访问
静态内部类只能访问外部类的静态成员,而内部类则可以访问外部类的所有成员。(普通内部类的字段和方法只能放在外部层,因为访问权限的限制)

调用静态内部类的方法或静态变量,通过类名直接调用。(外部类.内部类.方法或静态变量)
内部类中的this指的是自己,在访问外部类时不需要特殊方式,而且能访问外部类的所有成员,如同内部类链接了外部类。
访问内部类时,需要先实例化外部类,通过外部类名.内部类名.xxx的方式访问。

3.内部类向上转型
内部类可以和其他类一样向上转型,内部类向上转型时是基类型。如果内部类是private修饰的,只可以被外部类访问就能完全隐藏实现细节。

4.方法内的类
方法内定义内部类时,不能加访问修饰符号,且这些内部类会被事先编译好。

5.静态内部类(又叫嵌套类)
当内部类加了static修饰符后就成了静态内部类。
a.实例化静态内部类时,不需要实例化外部类。
b.不能通过静态内部类的对象访问非静态成员。(静态内部类只能访问外部类的静态成员)

6.为什么要用内部类
a.只为外部类使用。
b.提供了进入外部类的方式
c.主要:无论外部类是否继承了某个类,内部类都能独立继承一个类,内部类使多继承的解决方式更加完善。

### Java 内部类静态内部类的区别 #### 定义方式差异 在 Java 中,当定义一个内部类时,默认情况下该内部类是非静态的。如果希望创建的是静态内部类,则需要显式地使用 `static` 关键字来声明此类[^2]。 ```java public class OuterClass { private String outerField; // 默认非静态内部类 public class InnerClass { void display() { System.out.println("Accessing from inner non-static: " + outerField); } } // 静态内部类 public static class StaticInnerClass { void show() { // Cannot make a static reference to the non-static field outerField // System.out.println(outerField); // This would cause an error. System.out.println("This is inside static nested class."); } } } ``` #### 访问外部类成员变量的能力 对于普通的内部类来说,可以直接访问外部类的所有成员变量以及方法,无论这些成员是否被标记为私有还是受保护级别;而静态内部类仅能访问外部类中的静态成员,因为它们自己也是属于静态上下文中的一部分[^4]。 #### 实例化过程的不同之处 要实例化一个普通内部类的对象,首先得拥有一个外部类对象作为载体,这是因为每一个普通内部类都隐含着对外围对象的一个引用关系。然而,由于静态内部类并不持有这种关联性,所以只需要通过外部类名称就能直接构建其实例[^1]。 ```java OuterClass oc = new OuterClass(); // 创建非静态内部类实例前需先创建外部类实例 OuterClass.InnerClass ic = oc.new InnerClass(); // 可以直接创建静态内部类实例而不必关心外部类的状态 OuterClass.StaticInnerClass sic = new OuterClass.StaticInnerClass(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值