Java内部类

简介: 内部类

类;

面向对象思想,封装,继承,多态,this,super,static,final,权限
接口    抽象类

内部类;

内部类整体来说使用的比较少;但是是一个非常精妙的设计,一般高手都会用;
因为内部类有很多特性;

内部类定义:

当一个类,作为另一个类的类体存在,那么这个类就是内部类;

外部类定义:

包含了内部类的类,就是外部类;

.
内部类的四种形式:

    成员内部类
    静态内部类
    局部内部类
    匿名内部类

内部类 和 外部类的特性:

外部类 为 public 那么内部类还可以是公共类;

一个java文件有内部类和外部类,那么编译为class,每个类都对应着一个字节码文件,默认的名字是  外部类+$+内部类名字.class

成员内部类
成员内部类;

外部类不可以直接访问成员内部类的成员;

不是外部类的类不可以直接访问内部类的成员;

外部类需要创建对象才可以访问;

外部类创建内部类的对象:

在普通方法可以直接 new 内部类构造器();
在静态方法里不可以直接 new 内部类构造器;

1.    不可以在外部类的静态方法中,new 内部类构造器 来创建内部类的对象。

原因:静态的 要优先被加载,依附于类;

非静态的依附于对象,如果说对象不存在,那么可以认为非静态方法和非静态属性不存在;

成员内部类,依附于外部类的对象存在!

在静态的加载时,外部类的对象没有,进而得出内部类不存在!!

2.    外部类的静态方法里,得到内部类的对象;
    2.1    先创建外部类的对象
        Outclass outclass = new Outclass();
    2.2     利用外部类的对象创建内部类的对象;
        InnerClass innerClass = outclass.new InnerClass();

3.    在不是外部类的类中,创建内部类的对象;
    3.1    先创建外部类的对象;
        Outclass outclass = new Outclass();
    3.2    利用外部类的对象创建内部类的对象;
        OuterClass.InnerClass innerClass = outclass.new InnerClass();
    如果不单独到内部类的包,那么用   外部类.内部类名 的类型;

得到内部类的对象,访问其成员的特殊之处:

外部类 即便是 私有化 private 修饰的成员;仍然可以使用 对象.方式访问;

        成员包括:属性 构造器 方法
不是外部类的类,就要遵守权限的约束!

内部类可以直接访问外部类的成员,不受到权限的限制,可以直接访问外部类的静态成员;

外部类不可以直接访问成员内部类的静态成员;

成员内部类,不可以有静态成员:
但是可以给一个解决的方案,在属性上增加final;

1.    成员内部类 不可以有静态成员;
    static 代表静态的 优先被加载的
    成员内部类依附于外部类的对象存在;两者有矛盾

2.    增加了 final 就可以有静态的属性;
    final 代表最终的,不变的,final修饰的属性时常量;
    常量是在编译期的时候就确定的;

3.    成员内部类 可以被 static 修饰;
    成员内部类 被 static 修饰之后 就变成了静态内部类
    静态内部类的特性  和 成员内部类有很大的区别;

静态内部类
静态内部类

    在 成员内部类的基础上,加上 static 修饰符;就变成了 静态内部类;
    和 局部内部类,匿名内部类 没关系

    静态内部类不依附于外部类对象,依附外部类;
    因为静态内部类 相当于 外部类的静态成员;

外部类可以直接访问 静态内部类的 静态成员 内部类名.属性名
外部类不可以直接访问 非静态的成员;

非外部类的类,可以直接访问静态内部类的静态成员;

        不可以直接访问非静态类的成员

外部类 和 非外部类的类 通过创建对象 才能访问 静态内部类的非静态成员;

创建静态内部类的对象

        new 静态内部类构造器( [ 实参] )
外部类  InnerClass innerClass = new InnerClass();

非外部类的类OutClass.InnerClass innerClass = new OuterClass.InnerClass();

访问内部类权限上有何特殊之处?

外部类可以不考虑权限限制;
不是外部类的类,需要考虑权限;

静态内部类可以直接访问外部类静态成员;
可以创建外部类的对象,用对象访问非静态成员;

使用了静态内部类,不会导致外部类加载

内部类的意义:

    真正的实现多继承;
    内部类还要其他的应用场景;

相关文章
|
1月前
|
Java 编译器
【Java】内部类
【Java】内部类
21 0
|
3月前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
3月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
37 5
|
4月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
37 6
|
3月前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
5月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
90 2
|
5月前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
5月前
|
Java 编译器
24. 【Java教程】内部类
24. 【Java教程】内部类
29 2
|
6月前
|
Java 程序员
Java的内部类与匿名类的技术性文章
Java的内部类与匿名类的技术性文章
43 1
|
6月前
|
Java
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
Java内部类(成员内部类、静态内部类、局部内部类、局部内部类)
46 3