zoukankan      html  css  js  c++  java
  • java面对对象(六)--内部类、匿名内部类

    内部类

    可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如:

     1 class Outer{
     2  3     class Inner{
     4         ….
     5     }
     6 }
     7 class Outer1{}       // 这个Inner1不是Outer1的内部类,不在Outer1的类体括号内
     8     class Innter1{
     9     ……
    10     }
    11 Class Outer2{      //Inner2虽然是在Outer2的方法内,但还是在Outer2的类体括号内,是内部类
    12     ……
    13     public void test(){
    14         class Inner2{
    15         ….
    16         }
    17     }
    18 }

    内部类有什么问题和好处:

    • 问题:外部类不使用或不创建外部类对象,就不能直接创建内部类对象
    • 好处:外部类的私有属性,内部类可使用,而且不破坏封装,这也是为什么内部类存在的重要原因


    内部类的特性

    • 内部类的特征与变量概念特性很相似
    • 内部类的位置与变量位置相似
    • 变量可分为实例变量(成员变量),局部变量,静态变量
    • 内部类与变量相似,也可分为四种


    内部类的分类
    静态内部类,成员内部类,局部内部类,匿名内部类

    成员内部类

    1.使用成员内部类就象使用成员变量一样,在本类的主方法中则直接使用成员内部类,不用加上外部类的名字来访问。但在其他类的主方法中要使用成员内部类则就需要使用外部类.内部类来访问。
    2.使用外部类名来访问内部类还因为一个内部类可能有不同的外部类
    3.创建一个成员内部类对象必须先创建外部类的对象,因为成员内部类要访问外部类的成员
    4.成员内部类可以访问外部类的所有属性
    5.成员内部类中不能定义有静态属性
    6.当外部类的成员与内部类成员,内部类中局部变量同名时,则使用三种不同方式访问

    • 直接使用变量名则访问局部变量
    •  使用this.变量名则访问内部类的成员
    • 使用外部类名.this.变量名则访问外部类的成员

    静态内部类

    • 在成员位置上定义为static的内部类,称为静态内部类
    • 静态内部类类似于静态变量,修饰静态变量的修饰符也可以修饰静态内部类
    • 静态内部类与静态方法,静态属性相似,访问静态方法,静态属性用类名.属性名/方法名访问,但是在本类中可不用类名.来访问。静态内部类也一样,在本类方法中访问则不用加上外部类名来访问,若在其他类的方法中则要加外部类名.内部类名来访问。
    • 静态内部类中只能访问外部类的静态成员和本内部类的成员
    • 静态内部类中不能访问外部类的非静态成员

    匿名内部类

    1.匿名内部类是一种特殊的局部内部类,局部内部类可以转化为匿名内部类
    2.局部内部类要转化为匿名内部类必须具备3个条件

    • 首先是一个局部内部类,也是一个私有的内部类
    • 该局部内部类实现一个接口或继承一个父类
    • 局部内部类只new一次创建一个对象

    3.匿名内部类就是无显式地声明某个类名来实现接口,而直接实现接口的方法的类

    4.匿名内部类不能定义构造方法,因为匿名内部类是一个特殊局部内部类,它没有类名。

    5.匿名内部类可以访问外部类的局部变量,但也要求外部类的局部变量是final型的才能访问

    6.匿名内部类可以访问外部类的属性

    7.匿名内部类可以在一个类的方法中创建,同样可以在一个类的主方法中实现。

    8.当继承的父类中抽象方法与实现的接口中方法同名,同参数列表,同返回类型,则子类只写一个方法实现就可以了

    9.当继承的父类中抽象方法与实现的接口中的方法同名,但返回类型不同,则子类就必须写出每个方法,但这样的方法集同名,返回类型不一样则认为是同一方法,又不能构成重载,则就会编译出错

  • 相关阅读:
    html5 -- data-* 自定义属性
    javascript -- canvas绘制曲线
    php -- 取整数
    vim 常用命令
    Html Meta 标签详解
    基于行块分布函数的正文抽取
    机器学习公开课~~~~mooc
    快速排序
    mapreduce (三) MapReduce实现倒排索引(二)
    temp gbk2utf8
  • 原文地址:https://www.cnblogs.com/AloneZ/p/java7.html
Copyright © 2011-2022 走看看