• 内部类


    内部类

    分类:

    1、成员内部类

    格式:

    修饰符 class 外部类名称{

      修饰符 class 内部类名称{

        //...

      }

      //...

    }

    注意:内用外,随意访问;外用内,需要内部类对象。

    使用方式:

    1、间接方式:在外部类的方法当中,使用内部类,然后main只是调用外部类的方法。

    2、直接方式:

    公式:外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称()

    public class Body {

      public class Heart{//成员内部类

          public void beat(){//内部类方法
              System.out.println("心的跳动");
          }
      }

      public void method(){//外部类方法
          System.out.println("外部类的方法");
      }
    }
    public class Outer {
      int num = 10;//外部类的成员变量

      public class Inner{
          int num = 20;//内部类的成员变量

          public void method() {
              int num = 30;//内部类方法的局部变量
              System.out.println(num);//30,局部变量就近原则
              System.out.println(this.num);//20,内部类的成员变量
              System.out.println(Outer.this.num);//外部类的成员变量
          }
      }
    }

    2、局部内部类(包含匿名内部类)

    /**
    * @program: intellij idea
    * @description:如果一个类是定义在一个方法内部的,那么这就是一个局部内部类。
    * “局部”,只有当前所属的方法才能使用它,出了这个方法外面就不能用了。
    * 定义格式:
    * 修饰符 class 外部类名称{
    *     修饰符 返回值类型   外部类方法名称(参数列表){
    *         class 局部内部类名称{
    *             //...
    *         }
    *     }
    * }
    * @author: lixy
    * @create: 2020-04-30 17:40
    **/
    public class Outer {
      public void method(){
          class Inner{//局部内部类
              int num = 10;
              public void methodInner(){
                  System.out.println(num);//10
              }
          }
          Inner inner = new Inner();
          inner.methodInner();
      }
    }
    public class Demo07Main {
      public static void main(String[] args) {
          Outer outer = new Outer();
          outer.method();
      }
    }

    匿名内部类

    如果接口的实现类(或父类的子类)只需要使用唯一一次,那么这种情况下就可以省略掉该类型的定义,而改为使用 匿名内部类。

    匿名内部类的定义格式:

    接口名称 对象名 = new 接口名称(){

      //覆盖重写所有抽象方法

    };

    注意:

    1、匿名内部类,在创建对象的时候,只能使用唯一一次。如果希望多次创建对象,而且类的内容一样的话,那么类的内容一样的话,那么就必须使用单独定义的实现类了。

    2、匿名对象,在调用方法的时候,只能使用唯一一次。如果希望同一个对象调用多次方法,那么必须给对象起个名字。

    3、匿名内部类是省略了实现类/子类名称,但是匿名对象是省略了对象名称。

    注:匿名内部类和匿名对象不是一回事。

     

  • 相关阅读:
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
    Careercup
  • 原文地址:https://www.cnblogs.com/lxy522/p/12810581.html
Copyright © 2020-2023  润新知