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

    内部类:在类中的另外一个类。
    1.分类
    1)成员内部类:在类的成员变量/成员方法位置编写,与外部类的属性、方法并列。
    2)静态内部类: 定义在类中,任何方法外,用static修饰
    3)局部内部类:在方法中定义的类,与局部变量类似。
    4)匿名内部类:没有名字的类
    2.成员内部类
    1)可以访问外部类的所有属性。
    2)可以定义非静态属性和方法,不可以定义static修饰的属性和方法,可以定义static final修饰的编译期变量【不用加载类的字节码】
    3)为什么不可以定义static修饰的属性和方法?
    内部类是外部类的一个成员,外部类初始化的时候,内部类才能初始化,static修饰的属于类,在类加载的 时候就要初始化,前后矛盾
    static final 修饰的变量叫常量,
    常量分为编译期常量,程序编译【不需要加载类的字节码】,就可以确定常量的值
    非编译期常量。程序运行【需要加载类的字节码】,确定常量的值
    4)方法的调用:
         4.1)内部类调用:
                             调用自己的方法属性:直接调用  或者this.属性名、this.方法名();
                              调用外部类的方法属性:外部类.this.属性名、 外部类.this.方法名();
          4.2) 外部类调用:
                             普通方法:构建内部类对象--》对象名.方法名();
                              main方法:构建外部类对象--》构建内部类对象---》对象名.方法();

    3.静态内部类
    3.1)可以定义静态的成员、非静态的成员
    3.2)方法属性调用:
    3.2.1内部类调用
       调用自己的静态属性、方法:类名.属性名 ;类名.方法名;
       调用自己的普通方法:直接调用、this.方法名;
       调用外部的静态方法属性:外部类名.方法名;
      不能调用外部的普通方法  
    3.2.2外部类调用
                             非静态:对象名.属性名
                                 静态: 类名.属性名
       
    4.局部内部类(在方法体中定义)
    1)不能使用任何的访问修饰符
    2)不可以定义静态的方法属性(同成员内部类)
    3)方法调用:内部类调用:(同成员内部类)
                         访问局部变量: 局部内部类只能访问方法中声明的final类型的变量。
                         外部类调用: 不能访问内部类的任何属性方法                          
    4)为什么外部类不能访问局部内部类的属性、方法?
    因为局部内部类定义在方法中,而方法需要所在类的对象去调用。
    5)为什么局部变量类只能访问局部变量中final修饰的变量?
    内部类的生命周期比方法长。

    5.匿名内部类:没有名字的内部类
    作用:一般用匿名内部类来实现某接口(使用不多,不需要写一个类实现该接口,可以使用匿名内部类)【匿名内部类一般就是用来实现接口:
    重写接口(抽象类)中的方法
    声明:
            interface A{
                public void showA();
            }
            eg:   A a = new A(){
                public void showA(){
                }
                  };
    可用于集合中的比较器
        abstract class B{
                public void showB(){}
                public abstract void shohome();
            }
            eg:
                B b = new B(){
                    //可以重写showB 可以不重写
                    public void shohome(){}//抽象方法一定要实现
                };
            解释:这里并不是new了接口, 而是多态, new的是接口的实现类,这个实现类就是匿名内部类充当了




  • 相关阅读:
    Spring4 MVC json问题(406 Not Acceptable)
    java 从网络Url中下载文件
    Java基础知识(一) 自增、自减运算符
    java文件读写操作
    java集合运算:求交集,并集,集合差
    httpclient+jsoup实现网页信息抓取
    java web使用gradle配置详情
    关于mysql登录异常处理方法
    windows server 2012 r2 远程桌面连接指南
    Java生成带小图标的二维码-google zxing 工具类
  • 原文地址:https://www.cnblogs.com/yxj808/p/11966852.html
Copyright © 2011-2022 走看看