广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java中内部类的概念与分类详解
  • 789
分享到

Java中内部类的概念与分类详解

2024-04-02 19:04:59 789人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录内部类概念内部类的分类:成员内部类普通内部类静态内部类局部内部类总结只能使用修饰限定符:public 和 默认 来修饰类 内部类概念 在 Java 中,将一个类定义在另一个类的内

只能使用修饰限定符:public 和 默认 来修饰类

内部类概念

在 Java 中,将一个类定义在另一个类的内部,称为内部类

就是在一个类内部进行其他类结构的嵌套操作

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

举例:


//外部类
public class OutClass {

    //内部类
    class InnerClass{
        
    }
}

注意:内部类和外部类共享一个 java源文件,但是经过编译之后,会形成各自单独的字节码文件

在这里插入图片描述

内部类的分类:

成员内部类

在外部类中,内部类定义位置与外部类成员所处的位置相同,因此称为成员内部类

成员内部类有:普通内部类和静态内部类

普通内部类

未被 static 修饰的成员内部类


//外部类
public class OutClass {
    public void method(){

    }
    //普通内部类
    class InnerClass1{

    }
}

如何使用普通内部类??

先看普通类的使用:


package Date20210917;

public class Test1 {
    int a;
    public void method1(){

    }
    //普通内部类
    class InnerClass{
        int b;
        void method2() {

        }
    }
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.method1();
}

普通类:先构造对象—通过对象访问类内部的成员

那么,我们可以试着 new 一个 InnerClass 的对象:

在这里插入图片描述

我们发现并不可行,因为 InnerClass 也是 外部类的成员,所以我们在使用内部类时,需借助外部类的对象来创建内部类的对象

则正确操作:


public static void main(String[] args) {
    //普通类:先构造对象—通过对象访问类 内部的成员
    Test1 test1 = new Test1();
    test1.method1();

    //普通内部类
    InnerClass innerClass = test1.new InnerClass();
    innerClass.method2();
}

不同文件下 普通内部类的使用:


package Date20210917;

//外部类
public class OutClass {
    //测试Test1 中的内部类的使用:
    void test(){
        Test1 test1 = new Test1();
        //要实例化 Test1 中内部类的对象
        //InnerClass;   编译器不能识别,因为该类没在此文件中
        Test1.InnerClass t = test1.new InnerClass();
    }
    public static void main(String[] args) {

    }
}

当内外部类出现同名变量时,使用就近原则~ 即:优先访问内部类的


public class Test1 {
    int a;
    int b;
    public void method1(){

    }
    //普通内部类
    class InnerClass{
        int b;
        void method2() {
            a = 10;
            method1();
            b = 66; //给内部类自己的 成员变量 b 赋值
        }
    }
}

内部类中给同名外部类成员变量赋值:


Test1.this.b = 88;

调试验证:

在这里插入图片描述

即:编译后,对 method2 进行以下修改

修改前:


void method2() {
    a = 10;
    method1();
    b = 66; //给内部类自己的 成员变量 b 赋值
    Test1.this.b = 88;
}

修改后:


void method2(InnerClass this){
	this$0.a = 10;
	method1(this$0);
	this.b = 66;
	Test1.this.b = 88;
}

总结:

  1. 普通内部类对象必须在先有外部类对象前提下才能创建
  2. 外部类中,不能直接访问内部类中的成员,如果要访问必须先要创建内部类的对象
  3. 外部类中的任何成员都可以被在普通内部类方法中直接访问
  4. 在内部类方法中访问同名的成员时,优先访问自己的(就近原则),如果要访问外部类同名的成员,必须:外部类名称.this.同名成员 来访问

静态内部类

被 static 修饰的内部成员类称为静态内部类


public class Test2 {
    int a;
    int b;
    static int c;
    static void method1(){
        System.out.println("我是method()");
    }
    static class InnerClass{
        int d;
        static int e;
        void method2(){

        }
    }
}

静态内部类对象的创建

1.同文件中创建:


//静态成员变量的访问
System.out.println(Test2.c);

//不需要借助外部类对象来创建
InnerClass innerClass = new InnerClass();

2.不同文件里 创建:


void test2(){
    //静态成员变量的访问:
    System.out.println(Test2.c);

    //静态内部类对象 (类比静态成员变量的访问)
    Test2.InnerClass t = new Test2.InnerClass();
    //静态内部类对象可以直接创建,不需要依赖外部类对象

}

静态内部类方法里能否访问外部类的对象?

在这里插入图片描述

由上图可得到:在静态内部类中,只能访问外部类中的静态成员变量和静态成员方法

注意事项:

  • 在内部类中只能访问外部类中的静态成员
  • 在同一文件中创建内部类对象时,可以直接创建,不需要借助外部类对象
  • 在不同文件中创建内部类对象时,也可直接创建:所在文件名称.内部类名称.对象名
  • 成员内部类,经过编译之后会生成独立的字节码文件,命名格式为:外部类名称$内部类名称

在这里插入图片描述

局部内部类

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


//外部类
public class OutClass {

    public void method(){
        //局部内部类
        class InnerClass3{

        }
    }
	{   //局部内部类
		class InnerClass4{

		}
    }
}

不能被访问修饰限定符修饰:

在这里插入图片描述

不能再局部内部类中定义静态成员

在这里插入图片描述

不能再局部内部类中定义静态方法

在这里插入图片描述

注意事项:

局部内部类只能在所定义的方法体内部使用不能被public、static等修饰符修饰编译器也有自己独立的字节码文件,命名格式:外部类名字$x内部类名字.class,x是一个整数 匿名内部类(这里不做讲解)

总结

到此这篇关于Java中内部类的概念与分类的文章就介绍到这了,更多相关Java内部类内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java中内部类的概念与分类详解

本文链接: https://www.lsjlt.com/news/136234.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中内部类的概念与分类详解
    目录内部类概念内部类的分类:成员内部类普通内部类静态内部类局部内部类总结只能使用修饰限定符:public 和 默认 来修饰类 内部类概念 在 Java 中,将一个类定义在另一个类的内...
    99+
    2022-11-12
  • 详解Java内部类与对象的打印概念和流程
    目录一、内部类的概念二、内部类的分类三、成员内部类1、普通内部类2、静态内部类四、局部内部类五、对象的打印一、内部类的概念 在 Java 中,可以将一个类定义在另一个类或者一个方法的...
    99+
    2022-11-12
  • 详解Java 中的嵌套类与内部类
    详解Java 中的嵌套类与内部类在Java中,可以在一个类内部定义另一个类,这种类称为嵌套类(nested class)。嵌套类有两种类型:静态嵌套类和非静态嵌套类。静态嵌套类较少使用,非静态嵌套类使用较多,也就是常说的内部类。其中内部类又...
    99+
    2023-05-31
    java 嵌套类 内部类
  • java内部类的定义与分类示例详解
    内部类 基本介绍 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成员,内...
    99+
    2022-11-12
  • java外部类与内部类的关系详解
     private,public,protected,default的访问权限区别 在学习外部类与内部类之前我们首先要弄明白private,public,protected,defau...
    99+
    2022-11-12
  • Java内部类和异常类的概念以及使用
    目录1 内部类2 匿名类2.1 和子类有关的匿名类2.2 和接口有关的匿名类3 异常类3.1 try-catch语句3.2 自定义异常类4 断言图4.1图4.25 综合案例1 内部类...
    99+
    2022-11-12
  • Java内部类详解(含:成员内部类、局部内部类、匿名内部类、静态内部类)
    内部类是什么? 字面意思,在类的内部编写的类就叫内部类!即一个类的内部又完整的嵌套了另一个类结构,被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。 内部类是类的第五大成员→【提示:类的五大...
    99+
    2023-10-26
    jvm
  • java外部类与内部类怎么理解
    本篇内容主要讲解“java外部类与内部类怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java外部类与内部类怎么理解”吧! 一、内部类内部类就是将一个类A定义在类B里边,里边的...
    99+
    2023-06-22
  • java内部类的最详细详解
    目录1、成员内部类2、静态内部类3、方法内部类4、匿名内部类总结1、成员内部类 内部类与外部类的关系 a.成员内部类的创建需要依赖于外部类对象-(成员方法必须通过对象调用),在没有...
    99+
    2022-11-13
  • java 内部类的实例详解
    java 内部类的实例详解可以将一个类的定义放在另一个类的定义内部,这就是内部类。内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。第一次见面内部类我们从外面看是非常容易理解的,...
    99+
    2023-05-31
    java 内部类 ava
  • 详解Java匿名内部类
    匿名内部类: 先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是什么感觉。 为了进行对比,先举一个正常的...
    99+
    2022-11-12
  • JAVA抽象类,接口,内部类详解
    目录一.内容抽象类抽象方法与抽象类抽象类的使用接口接口的概念接口的定义接口中的成员变量接口中的方法接口的继承接口的实现/使用接口与抽象类的差异面向接口编程内部类非静态内部类静态内部类...
    99+
    2022-11-12
  • 如何理解Java内部类中的局部内部类
    这篇文章给大家介绍如何理解Java内部类中的局部内部类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。局部内部类  局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或...
    99+
    2023-06-05
  • Java开发中容器概念、分类与用法的示例分析
    这篇文章将为大家详细讲解有关Java开发中容器概念、分类与用法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、容器的概念在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器,...
    99+
    2023-05-30
    java
  • 如何理解Java内部类中的匿名内部类
    如何理解Java内部类中的匿名内部类,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。匿名内部类  匿名内部类应该是平时我们编写代码时用得最多的,在编写事件监听的代码时使用匿名...
    99+
    2023-06-05
  • 如何理解Java内部类中的成员内部类
    如何理解Java内部类中的成员内部类,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的...
    99+
    2023-06-05
  • Java内部类的使用教程详解
    目录一. 内部类简介1. 概念2. 优点3. 分类4. 内部类的特点5. Java类的创建要求二. 成员内部类1. 概念2. 特点3. 语法4. 案例5. 访问方式小结6. 关于th...
    99+
    2023-05-14
    Java内部类使用 Java内部类
  • Java中的内部类使用详情
    目录一,内部类访问成员二,访问内部类成员1,直接访问内部类的中的成员2,访问成员一,内部类访问成员 1,内部类可以直接访问外部类的成员,包括私有。2,外部类要访问内部类,必须建立内部...
    99+
    2022-11-13
  • java的内部类和外部类用法讲解
    目录一、为何使用内部类二、内部类与外部类的联系2.1内部类是一个相对独立的实体,与外部类不是is-a关系2.2内部类可以直接访问外部类的元素,但是外部类不可以直接访问内部类的元素2....
    99+
    2022-11-12
  • Java设计模式的基本概念和分类
    这篇文章主要介绍“Java设计模式的基本概念和分类”,在日常操作中,相信很多人在Java设计模式的基本概念和分类问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java设计模式的基本概念和分类”的疑惑有所帮助!...
    99+
    2023-06-16
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作