zoukankan      html  css  js  c++  java
  • java内部类笔记

    内部类

    1.   普通内部类

    <pre name="code" class="java">class className{
             [private|protected|public] [abstract|final]  class className{
             	returnType method(){
             [abstract|final]  class  ClassName{
     
    }
    }
    }
    }
    
    

    内部类可以访问外部类的所有字段和方法。每一个内部类都和一个具体的父类实例相关联,且必须有一个父类实例才可以创建内部实例。内部类创建语法:

    OutterClassName outter = newOutterClassName();

    Outter.InnerType inner = Outter.newInner();

    内部类获得外部类引用的语法:OutterClass.this;

    2.   嵌套类

    class ClassName{
             [Private|protected|public]static [abstract|final]  class ClassName{
             returnType method(){
             [abstract|final]  class  ClassName{
     
    }
    }
    }
    }

    嵌套类可以访问外部类的静态字段和静态方法,且不必与外部类的相关实例相关联,因此不能获得外部类实例的引用,且不能访问外部类实例方法和字段。嵌套类的创建语法:

    OutterClassName.InnerType inner = newOutterClassName.InnerType();

    3.   匿名内部类

    new SuperClassName|interfaceName(){
            
    }

    可用在new语句中,可以选择合适的父类构造函数。在方法中创建匿名内部类时,若要传递方法的参数给内部类时,在jdk1.8以前,需要方法的参数为final,jdk1.8中则可选为final

    匿名内部类没有构造方法,不过可以选择合适的父类构造方法,通过父类的构造方法来实现一部分的构造功能,也可以通过实例初始化语法实现简单的构造功能。

    匿名内部类因为创建语法中直接调用了父类的构造方法,因此自动获得了一个父类的实例。除了没有构造方法外,其余的特征和普通内部类相似。

    父类可以是一个具体的类,也可以是接口类型。

    总结

    内部类在不同的作用域中是独立的,因此可以在不同的作用域创建相同名字的内部类。但在方法作用域和块作用域之间会有命名冲突的问题。方法中的内部类定义在相应块作用域之后,可以解决冲突。这和方法中的变量和相应块作用域的变量关系类似。

    内部类是一个优雅的功能,但须防止滥用。内部内可以有效的拆分一个复杂类的功能,但又不失一个类的完整性,同时又可以获得有效的访问控制。匿名内部类可以部分的实现闭包的功能,又有类的完整性,但是滥用匿名内部类会影响代码的可读性和维护。


  • 相关阅读:
    LINQ to Entities 查询中的标准查询运算符
    LINQ to Entities 基于方法的查询语法
    ajax 与 form 提交的区别
    i++ & ++i 区别
    sizeof 数据类型大小 32位&64位
    标准数据类型宏定义
    long & int 区别
    类函数修饰 const
    指针
    数组
  • 原文地址:https://www.cnblogs.com/zhedan/p/7627213.html
Copyright © 2011-2022 走看看