内部类的分类(带示例分析)

本文详细介绍了Java中的内部类,包括静态内部类、实例内部类、局部内部类和匿名内部类。内部类提供了更好的封装性和访问权限,静态内部类可以直接访问外部类的静态成员,而实例内部类可以访问所有外部类的成员。文章还给出了各种内部类的示例,帮助理解它们的用法和初始化方式。
摘要由CSDN通过智能技术生成

内部类的定义

类中有五种成分:成员变量,成员方法,构造器,代码块和内部类
定义:内部类作为类的五大成员之一,内部类顾名思义就是在类的内部再定义一个类,内部类的使用主要体现在更好的封装性以及获得更多的权限修饰符。在外部类中,修饰符只能是缺省值或者public,但在内部类中,内部类可以是private,缺省值,protected,public,因此可以通过private修饰内部类,将外部类暴露,从而实现更好的封装性。

内部类的分类

我们所学的成员变量,成员方法以及代码块,都会根据有无static分为类和对象,有static修饰的就属于类,会与类一起加载,并且只有一份,可以被对象共享,当然,使用static final(final static 这两种写法并无区别)修饰的常量会被加载至常量池;无static修饰的就属于对象,而对象需要通过构造器初始化,因此并不存在什么静态构造器。内部类亦是如此,可以根据是否有static修饰区分为静态内部类,成员内部类(实例内部类),除此之外还有局部内部类以及匿名内部类,总的来说,静态内部类以及成员内部类使用的频率较少,我们完全可以重新定义一个类,这样其他类都能使用,只是不能实现内部类的封装性,但是这样体现的是组件化的思想,而且可以大大减少代码量,而不是每使用一次就定义一个内部类,局部内部类相对以上两种内部类来说使用的频率更少,但是匿名内部类使用的频率最高,与Lambda表达式有关。

内部类的规则

静态内部类

静态内部类其实与外部类完全一样,只是位置在外部类的内部。

  1. 静态内部类可以直接访问外部类的静态成员
  2. 静态内部类不能访问外部类的成员变量
    静态内部类属于外部类本身,因此可以访问外部类的静态成员,这里为什么说直接呢?内部类访问外部类静态成员本身是需要使用 类名.静态成员 的形式访问,但由于内部类本身就在外部类中,因此不需要使用类名,可以直接访问。
    外部类的成员变量是在初始化外部类对象是加载的,因此静态内部类不能直接访问外部类的成员变量

实例内部类

实例内部类也可以说是成员内部类,与静态内部类的区别在于没有static修饰。

  1. 实例内部类中不能有静态成员
  2. 实例内部类可以直接访问外部类的静态成员
  3. 实例内部类可以访问外部类的实例成员

实例内部类与静态内部类不同的是,实例内部类中不能有静态对象,因为实例内部类是属于外部类对象的,会在实例化对象是创建实例内部类,若实例内部类中能够存在静态成员,那么静态成员将之实例化多次,这显然是不和常理的。
实例内部类可以直接访问外部类的静态成员变量,因为外部类的静态成员变量只有一份,实例内部类可以共享。
实例内部类也可以访问外部类的实例成员,实例内部类会随着外部类初始化一起加载,与之一起的还有在外部类中的实例成员,简单的说,实例内部类与外部类的实例成员变量是同一级别的,因此实例内部类可以访问外部类中的实例成员。实例化外部类只能得到内部类,并不能得到内部类对象,获得内部类会在下面说。

局部内部类

内部类是在类的内部定义类,在类中定义的成员变量的作用范围在整个全局,相反,如果在for循环中定义一个初始值用于循环次数的初始化,这就是局部变量,同样,如果将一个类定义在类的成员内部中,这就是局部内部类,简单的说,内部类只需要理解即可,内部类的使用频率极低。

匿名内部类

匿名内部类顾名思义就是一个没有名字的类,也就是说这个类只需要在这里使用一次,因此不需要给这个内部类起名字(留下标记),内部类可以用于简化代码。

  1. 匿名内部类一旦被写出来,就会初始化一个对象
  2. 匿名内部类得到的对象就相当于new 匿名内部类
    匿名内部类一旦被写出来,就会被初始化一个对象,这个很容易理解,我们知道类只是一种抽象概念,向动物,人这种概念一样,只有通过构造器实例化才能得到具体的可操作对象,匿名内部类便是如此,若写出的匿名内部类没有初始化对象,那我们有该如何得到呢,匿名内部类没有标记,而类又是一个抽象概念,若不会初始化对象就显得很鸡肋。

内部类的示例

静态内部类

public class codeDemo {
   
    public static void main(String[] args) {
   
        //初始化静态内部类对象
        Outter.Inner inner = new Outter.Inner(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值