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

    定义:将一个类定义在另一个类的里面,对里面的类就称为内部类。

    访问特点:内部类可以直接访问外部类中的成员,包括私有成员。

         而外部类要访问内部类中的成员必须要建立内部类的对象。

    一般用于类的设计。

    分析事物时,发现该事物中还有事物,而且这个事物还在访问被描述事物的内容。

    这时就把还有的事物定义成内部类来描述。

    内部类的修饰符:

    直接访问外部类的内部类中的成员:

      Outer.Inner in = new Outer ().new Inner();(内部类很多被封装这种情况很少见)

     如果内部类是静态的。就相当于一个外部类。

      Outer.Inner in = new Outer. Inner();(这时不在需要创建内部类对象)

    如果内部类是静态的,成员是静态的。(此时不需要在创建对象了)

      Outer.Inner.function();(注意在编译时内部类是成员如果是静态修饰的,内部类也需要用static修饰)  

      

    为什么内部类能直接访问外部类中的成员?

      因为内部类持有了外部类的引用。  外部类名.this

    匿名内部类,就是内部类的简写格式。

      前提:内部类必须继承或者实现一个内部类或者接口。

    匿名内部类:其实就是一个匿名子类对象。(做了一个简化封装动作)

    格式:new 父类or接口(){子类内容}

    abstract class Demo

    {

      abstract void show();

    }

    class Outer

    {

      int num = 4;

      public void method ()

      {

        new Demo()  //直接新建了一个demo子类对象 如果内部类有多个方法可以创建对象          //Demo demo=new Demo(); 用demo对象调用对应的内部类方法

        {

          void show()

          {

            System.out.printlnn("show................"+num);  

          }

        }.show();  //对对象的方法进行调用

      }

    }

    class InnerClassDemo

    {

      public static void main ( String [] args )

      {

        new Outer().method();

      }

    }

    通常使用场景之一:

    当函数参数是接口类型时,而且接口中的方法不超过三个,可以使用匿名内部类作为实际参数进行传递。(超过三个方法的话这个匿名内部类对象太庞大阅读性变差)

    注意main方法是静态方法只能调用静态方法,不能直接访问非静态的内部类。

  • 相关阅读:
    linux内核initrd文件自定义方法
    Linux2.6 内核的 Initrd 机制解析
    Linux 系统裁剪笔记 4 (内核配置选项及删改)
    Linux 系统裁剪笔记 3
    Linux 系统裁剪笔记 软盘2
    Linux 系统裁剪笔记1
    如何获取Linux-gate.so.1动态库
    通过grub-install命令把grub安装到u盘
    爬虫之UserAgent用户代理
    爬虫之urllib包以及request模块和parse模块,爬虫之urllib.error模块
  • 原文地址:https://www.cnblogs.com/beulas/p/7900767.html
Copyright © 2011-2022 走看看