`

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

    博客分类:
  • 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嵌套类和内部类详解,本文讲解了什么是嵌套类及内部类、静态嵌套类、在外部类中定义内部类、在方法中定义内部类、匿名内部类等内容,需要的朋友可以参考下

    几行代码带你彻底搞懂Java内部类

    内部类基本概述语法格式成员内部类局部内部类匿名内部类静态嵌套类静态嵌套类和非静态嵌套类的区别 内部类 基本概述 当一个类的定义放在另一个类的实体时,则该类叫做内部类,该类所在的类叫做外部类 在一个类体中...

    JAVA语法总结 - 内部类

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

    Java中的匿名内部类小结

    java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下

    Java内部类的一些总结

     内部类分为: 成员内部类、局部内部类、静态嵌套类、匿名内部类 。  1.成员内部类  成员内部类是普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:  class Outter {  private int age = 12;...

    C#匿名委托和Java匿名局部内部类使用方法示例

    Java在嵌套类型这里提供的特性比较多,假设:Java的字节码只支持静态嵌套类,内部类、局部内部类和匿名局部内部类都是编译器提供的语法糖,这个假设目前没法验证(看不懂字节码),本文先来看一下C#是如何为我们提供...

    (超赞)JAVA精华之--深入JAVA API

    1.2.5 匿名内部类 1.2.6 内部类使用的其它的问题 1.3 文件和流 1.3.1 什么是数据流 1.3.2 InputStream 的方法有: 1.3.3 OutputStream 的方法: 1.3.4 File 类 1.3.5 文件流的建立 1.3.6 缓冲区流 1.3.7 原始型数据流...

    java 语言中常见易错知识点

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java基础知识

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java笔试题,java程序员常见的笔试

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java面试题大全-基础方面

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    JAVA SE学习精华集锦

    1.2.5 匿名内部类 49 1.2.6 内部类使用的其它的问题 50 1.3 文件和流 51 1.3.1 什么是数据流 51 1.3.2 InputStream 的方法有: 51 1.3.3 OutputStream 的方法: 51 1.3.4 File 类 51 1.3.5 文件流的建立 52 1.3.6 ...

    java面试宝典

    不写时默认为friendly2、 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类, 是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个...

    【05-面向对象(下)】

    •匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: •new 父类构造器(实例列表) |实现接口) •{ • //匿名内部类的 类体部分 •} •匿名内部类不能是抽象类,匿名内部类不能定义...

    JAVA笔试题集锦(1-30)基础部分

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    java经典面试题汇总

    2、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口) 答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,...

    javaSE代码实例

    15.4.2 基于接口实现的匿名内部类 335 15.4.3 匿名内部类的初始化 337 15.4.4 匿名内部类作用的体现 337 15.5 理解内部类 339 15.6 内部接口 340 15.6.1 定义在类中的内部接口 340 15.6.2 定义在接口中...

    Java

    类和对象基本类型和对对象的引用使用类型和包进行编程泛型和注释接口,嵌套类,功能概念使用界面静态嵌套类内部阶级匿名内部类lambda表达式功能接口例外情况异常处理程序,控制权的转移异步异常尝试,抓住,最后阻止...

    Java面试宝典

    一. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?...28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21

Global site tag (gtag.js) - Google Analytics