zoukankan      html  css  js  c++  java
  • 内部类 和匿名内部类的基本应用

    自己的笔记:

         内部的訪问规则:
              内部类能够直接訪问外部类的成员,包含私有。
              外部类要想訪问内部类,必须建立对象。
              之所以能够直接訪问外部类的成员,由于内部类持有外部类的引用,格式:Outer.this.x
       
         訪问格式:
              在内部类定义在外部类中的成员位置上,并且是非私有,能够在外部的其它类中。
              能够直接建立内部类的对象。
              格式:1. 外部类.内部类 变量名 = 外部对象.内部对象;
                      Outer.Inner in = new Outer().new Inner();
                   2. 当内部类在成员位置上,就能够被成员修饰符修饰。
                        比方 private:将内部类在外部类中进行封装。
                             static: 内部类具有了static特性。 
                                     当内部类被static修饰时,仅仅能直接訪问外部类的static成员,
                                     出现了想问局限。
                   3.在外部类中,怎样直接訪问static内部类中非静态成员?
                           new Outer.Inner().function();
                   4. 在外部类中,怎样直接訪问static内部类中的静态成员?
                            Outer.Inner.function();
         注意:
              当在内部类中定义了静态成员,那么内部类必须是静态内部类。(内部类中不能有静态声明除非内部类也是静态的)。
              当外部类中的静态方法訪问内部类中的方法时,那么内部类必须为静态的。

         什么时候使用内部类:
              当描写叙述的事物时,事物内部还有事物,该事物就应该用内部类封装:人-人体(private)                                                                                                                                                                     
              内部类中定义在局部时,
                  1. 不可被成员修饰符修饰。
                  2. 能够直接訪问外部类中的成员,由于他还持有外部类的引用,
                     可是是不能够訪问他所在的局部变量,仅仅能訪问被final修饰过的局部变量 。
          匿名内部类:
              1. 匿名内部类事实上就是内部类的简写格式。      
              2. 定义匿名内部类的前提:
                    内部类必修是继承一个类或者是接口
              3. 匿名内部类的格式:
                    new 父类或者接口(){定义子类的内容}
              4. 事实上匿名内部类就是一个匿名子类对象,并且这个对象有点胖,也能够说是带内容的对象。
              5. 在匿名内部类中能够写其它成员,但每次仅仅能调用一个方法,
                 但能够帮他取个名字用父类的引用指向子类的对象。

           使用情况: 当使用的方法的參数类型是一个接口类型时,直接向调用方法传入一个匿名对象。

        面试题:假如我没有父类,也没有接口让我去实现,还能写匿名内部类吗?
               答案 :能
         public class{
            new Object(){
                public void function(){}
              }
         }














  • 相关阅读:
    负载均衡之数据链路层
    阿里云CentOS6.8安装MySQL5.6
    Maven clean命令不能执行问题Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
    Oracle数据库不能创建表空间及表中文乱码问题
    win7物理主机与虚拟XP系统互相ping不通解决方法
    Linux严格区分大小写
    java的Date类型转换为MySQL数据库的Date类型
    Spring框架中的AOP技术----注解方式
    Ajax实现验证码异步校验
    Spring框架中的AOP技术----配置文件方式
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3801803.html
Copyright © 2011-2022 走看看