0
点赞
收藏
分享

微信扫一扫

Java系列(23)——内部类

金牛豆豆 2022-03-30 阅读 47


本系列博客汇总在这里:Java系列_汇总


目录

  • ​​一、简介​​
  • ​​二、私有内部类​​
  • ​​三、静态内部类​​
  • ​​四、匿名类​​
  • ​​五、局部内部类(了解)​​
  • ​​六、匿名内部类​​

一、简介

  1. 定义:把一个类定义到另一个类中,那么内部的类就是内部类。
  2. 注意:内部类不能直接创建。
  3. 创建内部类的语法:​​外部类.内部类 变量名 = new 外部类.new内部类对象​
  4. 内部类的外部类的方法如果想要访问内部类的方法,必须创建内部类的对象,根据内部类的对象来访问。
  5. 示例
  6. //Outter 类里再建 Inner 类
    class Outter
    {
    private static int num = 1;

    //定义内部类
    class Inner
    {
    //定义属性
    int num1;
    //定义方法
    public void show()
    {
    System.out.println("通过内部类的方法show打印num1:"+num1);
    }
    }
    public void method()
    {
    Inner inner = new Inner();
    inner.show();
    }
    }
    class Welcome
    {
    public static void main(String[] args)
    {
    Outter out = new Outter();
    out.method();
    //内部类不能直接创建对象
    //Inner inner = new Inner();
    Outter.Inner inner = new Outter().new Inner();
    //访问内部类方法
    inner.show();
    }
    }
  7. Java系列(23)——内部类_java
    Java系列(23)——内部类_匿名类_02

二、私有内部类

1、内部类被 private 来修饰,被 private 修饰的内部类只能在它所属的外部类中访问,非所属的外部类不能访问,出现错误

Java系列(23)——内部类_外部类_03

三、静态内部类

  1. 静态内部类的创建语法:​​外部类名.内部类名 变量名 = new 外部类名.内部类对象​
  2. 内部类可以是 static 的, 静态内部类只能访问它的外部类的静态属性。
  3. 示例
  4. \\Outter 类里再建 Inner 
    class Outter
    {
    private int num = 1;
    //内部类可以是static的,定义一个静态内部类
    //静态内部类只能访问它的外部类的静态属性
    static class Inner
    {
    public static void show()
    {
    System.out.println("show1静态方法被调用,num ="+num);
    }
    }
    }
    //主类
    class Welcome
    {
    public static void main(String[] args)
    {
    //静态内部类对象的创建
    Outter.Inner inner = new Outter.Inner();
    inner.show();
    }
    }
  5. Java系列(23)——内部类_内部类_04

四、匿名类

  1. 注意区分匿名类和匿名对象
  2. 示例
  3. interface MyInter
    {
    public void method();
    }
    class Myclass
    {
    public void method()
    {
    System.out.println("实现了method方法");
    }
    }
    class Welcome
    {
    public static void main(String[] args)
    {
    //创建匿名对象调用method。这个对象很快就会被垃圾回收机制回收(一次性的)
    new Myclass().method();

    //接口是不能实例化的,在匿名类创建的时候我们可以借助接口
    //创建了一个没有名字但是实现了MyInter接口的类的对象,用完就会被回收掉
    new MyInter()
    {
    public void method()
    {
    int i = 1;
    System.out.println("匿名类的对象的方法被调用"+i);
    }
    }.method();

    System.out.println("------------------------");

    //创建匿名类的对象赋值给接口引用变量mi
    MyInter mi = new MyInter()
    {
    int i = 3;
    public void method()
    {
    System.out.println("匿名类1的对象的方法被调用"+i);
    }
    };

    mi.method();
    }
    }
  4. Java系列(23)——内部类_java_05

五、局部内部类(了解)

  1. 把内部类定义到方法中,局部内部类。
  2. 示例
  3. 在外部类 Outter 的方法当中定义内部类 Inter
  4. class Outter
    {
    private static int num = 4;
    public void method()
    {
    //在方法中定义的类叫局部内部类
    class Inter
    {
    int num1 = 5;
    public void show()
    {
    System.out.println("局部内部类中的方法被调用"+num1);
    }
    }

    //创建局部内部类的对象
    Inter inner = new Inter();
    //调用局部内部类的方法
    inner.show();
    }
    }
    class Welcome
    {
    public static void main(String[] args)
    {
    Outter out = new Outter();
    out.method();
    }
    }
  5. Java系列(23)——内部类_匿名类_06

六、匿名内部类

  1. 什么是匿名内部类:没有名字的类,这种类需要在接口上实现。
  2. 匿名类和匿名类内部类都需要接口或者抽象类的支持。
  3. 创建一个匿名的类的对象实现OuterInter的接口,在大括号中实现接口中的方法,方法调用完毕后就会被垃圾回收机制回收。
  4. 示例
  5. interface MyInter
    {
    public void show();
    }
    class Outter
    {
    private static int num = 4;
    public void method()
    {
    new MyInter ()
    {
    int i = 9;
    public void show()
    {
    System.out.println("我是匿名内部类");
    }
    }.show();
    }
    }
    class Welcome
    {
    public static void main(String[] args)
    {
    Outter out = new Outter();
    out.method();
    }
    }
  6. Java系列(23)——内部类_外部类_07

如有错误,欢迎指正!



举报

相关推荐

0 条评论