`

嵌套类 内部类 静态内部类 匿名内部类

    博客分类:
  • Java
阅读更多

一、嵌套类(Nested Class)分为:内部类(Inner Class)、静态嵌套类(Static Nested Class)

二、写法:

class OutClass{

    static class StaticNestedClass{

        ...

    }

    class InnerClass{

        ...

    }

}

 

三、为什么要用嵌套类:

1、当仅希望在某个类中使用一个类时,用嵌套类的写法,就起到封装的作用。

2、提高代码可读性,与可维护性。

 

四、用例:

public class DataStructure {
    private final static int SIZE = 15;
    private int[] arrayOfInts = new int[SIZE];
   
    public DataStructure() {
        for (int i = 0; i < SIZE; i++) {
            arrayOfInts[i] = i;
        }
    }
   
    public void printEven() {
        InnerEvenIterator iterator = new InnerEvenIterator();//外部类中直接调用内部类
        while (iterator.hasNext()) {
            System.out.println(iterator.getNext() + " ");
        }
    }
   
    private class InnerEvenIterator {//非静态内部类
        private int next = 1;
        public boolean hasNext() {
            return (next <= SIZE - 1);
        }
       
        public int getNext() {
            int retValue = arrayOfInts[next];//直接访问外部类变量
            next += 2;
            return retValue;
        }
    }
    
    private void outPrivateFunction(){}
    private static void staticOutPrivateFunction(){}
    private static int i;
    static class NestedClass//静态嵌套类
    {   
     NestedClass(){}
     int i = 8;
     void access()
     {
      System.out.println(i);//自身变量的访问
      System.out.println(DataStructure.i);//外部类变量的访问
      DataStructure.staticOutPrivateFunction();//调用外部类静态方法
      new DataStructure().outPrivateFunction();
     }
    }
   
    interface Work //接口也可作为嵌套类,实现匿名嵌套类,参数嵌套类类似
    {
     public int Money();
    }
   
    public static void main(String s[]) {
     DataStructure.InnerEvenIterator ie = new DataStructure().new InnerEvenIterator(); //创建非静态内部类实例
     DataStructure.NestedClass dn = new DataStructure.NestedClass(); //创建静态嵌套类实例
     DataStructure ds = new DataStructure();
     ds.printEven();
     dn.access();
     new Work()
        {
         public int Money(){ return 2000;};
        }.Money();
    }
}

分享到:
评论

相关推荐

    Java 深入理解嵌套类和内部类

    非静态嵌套类可以分为三种:在一个类中直接定义的内部类、在一个方法中定义的内部类和匿名内部类。匿名内部类是指没有名字的内部类,通常用于实现某个接口或继承某个类。 四、在外部类中定义内部类 在外部类中定义...

    java和kotlin的内部类静态嵌套类

    内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。其中,静态嵌套类是与外部类关联但不持有对外部类的引用,因此它可以像普通类一样被静态引用,而无需外部类实例。 Java的静态嵌套类通常用于...

    Java4Android 35_内部类和匿名内部类

    - 匿名内部类不能包含静态成员(除了final static变量)。 - 匿名内部类不能有构造器,但可以通过初始化块来传递参数。 学习“Java4Android 35_内部类和匿名内部类”这个教程,开发者将掌握如何有效地利用内部类和...

    浅谈内部类与静态内部类的应用

    内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...

    内部类 匿名内部类 内部接口 对比说明

    本文将详细探讨内部类、匿名内部类以及内部接口的对比和使用。 首先,让我们了解一下内部类的基本概念。内部类定义在其他类的内部,编译后会生成两个独立的类文件。内部类能够自由地访问外部类的所有成员,包括私有...

    内部类分类及应用

    内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。每种内部类都有其特点和应用场景。 一、成员内部类 成员内部类是指定义在外部类中的内部类。它们可以访问外部类的所有成员变量和方法,无论...

    java 静态内部类的使用规范

    - 匿名内部类不能是静态的,它总是在使用时被实例化,并且通常用于实现接口或继承一个类。 - 静态内部类则可以独立存在,无需匿名。 **6. 编译后的文件结构** - Java编译器会为静态内部类生成独立的`.class`文件,...

    深入理解Java嵌套类和内部类

    在外部类中定义内部类可以分为成员内部类、静态嵌套类、方法内部类、匿名内部类等几种。内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。内部类可以...

    嵌套类内存布局分析(vc)

    嵌套类在编程中是一种特殊的类定义方式,它允许在一个类的定义内部定义另一个类。这种结构在设计复杂的软件系统时特别有用,因为嵌套类可以封装特定于外部类的信息,提供良好的信息隐藏和模块化。本文将深入探讨嵌套...

    java-嵌套类(inner class)-来自oracle官网

    匿名内部类是内部类的一种特殊形式,它没有名称,并且在创建时立即实例化。匿名内部类常用于实现接口或继承类的简短场合。 ##### 3.3 局部内部类 局部内部类是在方法或代码块中定义的内部类。这种类型的内部类只能...

    Java中的内部类和匿名类

    Java 中的内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在 C++ 里也有,那就是嵌套类(Nested Class)。内部类从表面上看,就是在类中又定义了一个类,而实际上并没有那么简单。内部类的使用可以让你...

    java嵌套类

    内部类是指未被static修饰的嵌套类,包括成员内部类、局部内部类和匿名内部类。内部类的一个重要特性是它能够捕获外部类的上下文,例如,它可以直接访问外部类的成员变量和方法。内部类不能有静态方法和静态初始化...

    嵌套类的学习

    内部类可以是成员内部类、局部内部类、匿名内部类和静态内部类。 2. 静态嵌套类(Static Nested Class):静态嵌套类不是外部类的成员,因此不持有对外部类的引用。它们可以通过类名直接访问,就像普通静态成员一样...

    Java语法总结 - 内部类

    内部类可以分为四种:成员内部类、静态嵌套类、方法内部类和匿名内部类。 成员内部类 成员内部类是定义在外部类的成员变量中的一种内部类。它可以访问外部类的所有成员变量和方法,包括私有的变量和方法。成员内部...

    详解Java 中的嵌套类与内部类

    * 匿名内部类可以访问外部类的静态成员变量和非静态成员变量。 示例程序: ```java package lxg; public class OuterClass { private static String outer_static_string = "outer_static_string"; private ...

    匿名内部类_Anoymous_Inner_

    5. **内部类与嵌套类的区别**:内部类分为匿名内部类和非匿名内部类(如成员内部类和局部内部类)。非匿名内部类是具有名称的类,可以访问外部类的成员,包括私有成员。而匿名内部类没有名称,不能直接访问外部类的...

    Java嵌套类和内部类详解

    - 匿名内部类:没有名称的内部类,通常用于快速实现简单的接口或抽象类的子类。 内部类的实例总是与外部类的实例关联,也就是说,要创建内部类的实例,必须先有一个外部类的实例。这使得内部类可以用来封装与外部...

    Java内部类总结

    Java内部类主要包括以下几种类型:成员内部类(非静态内部类)、静态内部类(也称为静态嵌套类)、局部内部类和匿名内部类。 - **成员内部类**:这种类型的内部类是定义在外部类的一个成员位置上,它可以访问外部类...

    第11章 内部类(Inner class).ppt

    - 匿名内部类没有名称,通常用于快速创建一次性使用的简单类,常用于实现接口或继承已有类的情况。 4. **嵌套接口**: - 虽然名为“内部类”,但Java也允许接口嵌套在其他接口或类中,这与类的内部类相似,提供了...

    JAVA语法总结 - 内部类

    4. **匿名内部类**(Anonymous Inner Class) 这些内部类之间存在一些共性: - **编译后的文件格式**:内部类最终会被编译成独立的`.class`文件,文件名通常为外部类名称加上`$`符号和内部类名称。 - **访问控制**...

Global site tag (gtag.js) - Google Analytics