• 内部类


    前言

      内部类是定义在一个类里面的类,灵活地使用它能让代码变得更优雅。

      本文讲解内部类的机制以及使用技巧。

    性质

      首先要强调的是:内部类只是一种类之间的关系,而不是对象之间的关系。一定要将它和类成员区分开。

    作用

      定义一个内部类通常出于以下两个目的:

      1. 让该类可以访问其外部类的所有成员(包括私有),且对其他所有与该类同一个包的类隐藏。

        在Java中,没有友元机制。因此达到这个目的的方法有且只有内部类。

      2. 匿名内部类可以使回调功能的代码更为精简。

        如果某个类的作用仅仅是实现某个接口,并且它只会被实例化一次,那么匿名内部类就会派上用场了(具体用法下面会讲)。

    种类

      内部类分为如下几种:

      1. 成员内部类

      2. 局部内部类

      3. 静态内部类

      4. 匿名内部类

      各自的特点和使用方法将在下面一一介绍。

    成员内部类

      成员内部类的定义方式大致是:

    1 class Outer {
    2     class Inner{}
    3 }

      这样定义的内部类能够访问到外部类的所有成员。

    局部内部类

      局部内部类的定义方式大致是:

    1 class Outer {
    2     public void doSomething(){
    3         class Inner{
    4             public void seeOuter(){
    5             }
    6         }
    7     }
    8 } 

      局部内部类可以将自己完全的和定义它的方法的外面的世界隔离开。

      同时,它可以访问到外部类的final域。

    静态内部类

      如果只是为了实现隐藏功能,不需要访问外部类的对象,那么可以如下方式定义一个静态内部类:

    1 class Outer{
    2     static class Inner{
    3     }
    4 }

    匿名内部类

      这是一种使用比较多的内部类,能够精简回调使产生的代码。

     1 interface Person {
     2     public void eat();
     3 }
     4  
     5 public class Demo {
     6     public static void main(String[] args) {
     7         Person p = new Person() {
     8             public void eat() {
     9                 System.out.println("eat something");
    10             }
    11         };
    12         p.eat();
    13     }
    14 }

      这样就不用专门为了实现Person接口而再去定义一个新类了。

      但是匿名内部类有一些限制:

      1. 不能有构造方法

      2. 不能有静态域 静态方法

      3. 无权限及static修辞符

    小结

      这部分的知识比较杂,不要求一次理解透。多在将来的项目中体会学习即可。

  • 相关阅读:
    java xpath
    structs2 Interceptor
    jetbrains idea web help
    Java xpath example code THE RIGHT WAY
    java xpath engine
    本地安装jruby到maven仓库,由于公司网络不给力
    skybe的linux下的版本下载
    mybastis学 rails有migration了
    Using Java from Ruby with JRuby IRB
    PropertyPlaceholderConfigurer
  • 原文地址:https://www.cnblogs.com/scut-fm/p/4151347.html
Copyright © 2020-2023  润新知