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

    概述

         当一个事物在另外一个事物内部的时候,我们把内部的事物用内部类来描述

    class Body{
           class Blood{//血液就在人体的内部,用内部类更贴切
    
           }
           class Bone{
    
           }
           class Heart{
    
           }
         }

    分类

        1.成员内部类:定义在成员位置上的类

    class Outer{
              private int i=3;
              private static int j=10;
            class Inner{
              private int i=2;
              public void innerMethod(){
                  int i=1;
                  System.out.println(i);//1
                  System.out.println(this.i);//2 内部类的this访问的Inner的成员变量
                  System.out.println(Outer.this.i);//3 通过外部类的this访问外部类的成员
                  System.out.println(Outer.j);//10
              }
            }
          }
     class Body{
              class Heart{
                 public void jump(){
                  System.out.println("我心永恒");
                 }
              }
            public Heart getHeart(){//Body类的方法
                return new Heart();
    
            }
          }
    import 包名.Body.Heart;//使用到Heart类型需要导入,import 包名.外部类名.内部类名
          class Demo{
              public static void main(String[] args) {
                  Body body=new Body();
                  Heart heart=body.getHeart();
                  heart.jump();//我心永恒
              }
          }

        2.局部内部类:定义在局部位置上的类

     interface Father{
               public abstract void innerMethod();
          }
     class Outer{
               public Father outerMethod(){//不能使用Inner作为返回值,因为在outerMethod方法定义的时候
                                            //还没有加载Inner类,Inner类只有outerMethod被调用的时候才加载Inner类
                                            //返回值为Father,相当于Father father=new Inner();//父接口指向子类对象
                      final int i=3;//局部内部类可以访问局部变量,但是这个变量必须加final修饰
                   class Inner implements Father{
                           public void innerMethod(){
                        System.out.println("我是内部类的方法,我怕谁!!"+i);
                           }
                      }
                  return new Inner();
               }
             
          }
      class Demo{
              public static void main(String[] args) {
                   Outer outer=new Outer();
                   Father father=outer.outerMethod();//Father father=new Inner();
                   father.innerMethod();//编译看左边,运行执行Inner中的innerMethod方法
              }
          }
  • 相关阅读:
    博客园的Windows Mobile开发专栏
    使大脑迟钝的9种不良习惯
    javascript中实现QueryString的function
    DeviceIoControl实现异步的方法总结
    List of Scientist`s Names
    制版经验谈
    AVRUSB技术探讨(转)
    unexpected WaitForXfer() behavior
    openMP讨论帖
    全角半角SBCDBC
  • 原文地址:https://www.cnblogs.com/xwb583312435/p/9115134.html
Copyright © 2011-2022 走看看