• 内部类_Java


    作者:爱塔居的博客_CSDN博客-JavaSE领域博主

    专栏:JavaSE

    文章目录

    目录

    文章目录

    一、内部类的概念

    二、内部类的分类

    1.静态内部类(被static修饰)

    2.非静态内部类

     3.局部内部类

     4.匿名内部类


    一、内部类的概念

    当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么这个内部的完整结构最好使用内部类。在Java中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。

    内部类也是封装的一种体现。

    public class OutClass{

     class InnerClass{

    ……

          }

    }

    🍵OutClass是外部类,InnerClass是内部类

    二、内部类的分类

    🥑内部类分为:

    1.静态内部类

    2.非静态内部类/实例内部类

    3.局部内部类

    4.匿名内部类

    1.静态内部类(被static修饰)

    静态内部类当中,不能直接访问内部类的非静态成员。

    通过这个代码,我们主要注意怎么实例化对象,还有如何访问外部类的非静态变量。

    1. class Outer {
    2. public int a1=1;
    3. private int a2=2;
    4. static public int a3=3;
    5. static class Inner{
    6. public int a4=4;
    7. private int a5=5;
    8. public void func(){
    9. Outer outer=new Outer();
    10. System.out.println(outer.a1);//通过引用,访问外部类的非静态成员
    11. System.out.println(outer.a2);
    12. System.out.println(a3);
    13. System.out.println(a4);
    14. System.out.println(a5);
    15. }
    16. }
    17. }
    18. public class Test{
    19. public static void main(String[] args) {
    20. Outer.Inner inner=new Outer.Inner();//静态内部类的实例化
    21. inner.func();
    22. }
    23. }

    2.非静态内部类

    1. class Outer {
    2. public int a1=1;
    3. private int a2=2;
    4. static public int a3=3;
    5. class Inner{
    6. public int a4=4;
    7. private int a5=5;
    8. public void func(){
    9. Outer outer=new Outer();
    10. System.out.println(outer.a1);
    11. System.out.println(outer.a2);
    12. System.out.println(a3);
    13. System.out.println(a4);
    14. System.out.println(a5);
    15. }
    16. }
    17. }
    18. public class Test{
    19. public static void main(String[] args) {
    20. Outer outer=new Outer();
    21. Outer.Inner inner=outer.new Inner();
    22. inner.func();
    23. }
    24. }

    当外部类和内部类有同名变量时:

    1. class Outer {
    2. public int a1=1;
    3. class Inner{
    4. public int a1=2;
    5. public void func(){
    6. Outer outer=new Outer();
    7. System.out.println(outer.a1);
    8. System.out.println(Inner.this.a1);
    9. }
    10. }
    11. }
    12. public class Test{
    13. public static void main(String[] args) {
    14. Outer outer=new Outer();
    15. Outer.Inner inner=outer.new Inner();
    16. inner.func();
    17. }
    18. }

    输出:

    注意: 

    1. class Outer {
    2. public int a1=1;
    3. class Inner{
    4. static final public int a1=2;//加上final就相当于常量。否则会报错。因为static静态类是不依赖对象的。
    5. public void func(){
    6. Outer outer=new Outer();
    7. System.out.println(outer.a1);
    8. System.out.println(Inner.this.a1);
    9. }
    10. }
    11. }
    12. public class Test{
    13. public static void main(String[] args) {
    14. Outer outer=new Outer();
    15. Outer.Inner inner=outer.new Inner();
    16. inner.func();
    17. }
    18. }

     3.局部内部类

     定义在外部类的方法体或者{}中,该种内部类只能在其定义的位置使用,一般使用的非常少。

    1. class Outer {
    2. public int a=1;
    3. public void method(){
    4. int b=10;
    5. class Inner{
    6. public void func(){
    7. Outer outer=new Outer();
    8. System.out.println(a);
    9. System.out.println(b);
    10. }
    11. }
    12. Inner inner=new Inner();
    13. inner.func();
    14. }
    15. }
    16. public class Test{
    17. public static void main(String[] args) {
    18. Outer outer=new Outer();
    19. outer.method();
    20. }
    21. }

    🍧局部内部类不能被public,static等访问修饰限定符修饰。同时,只能在该方法体内部使用,其他位置都不能使用。

     4.匿名内部类

    1. interface IA{
    2. void func();
    3. }
    4. class AA implements IA{
    5. public void func(){
    6. System.out.println("hello");
    7. }
    8. }
    9. public class Test{
    10. public static void main(String[] args) {
    11. new IA(){//这个类没有名字,所以叫匿名内部类
    12. public void func(){
    13. System.out.println("hi");
    14. }
    15. }.func();
    16. }
    17. }

    输出结果:


  • 相关阅读:
    接口技术:总线部分练习题(PCI配置空间)
    嵌入式STM32 单片机 GPIO 的工作原理详解
    MongoDB备份与恢复以及导入导出
    【网络教程】IPtables官方教程--学习笔记4
    【andriod】设备APP开发之前端实战操作代码
    MobileViT——论文简述
    集群服务器是什么有什么优势
    微信小程序在线阅读系统微信小程序设计与实现
    tsconfig.json在配置文件中找不到任何输入,怎么办?
    Python学习笔记--自定义元类
  • 原文地址:https://blog.csdn.net/m0_65683419/article/details/127967007