内部类

1.内部类概述

内部类:就是在一个类中定义一个类。举例:在一个类A的内部定义一个类B,类B就被称为内部类

内部类的定义格式

  • 格式:
public class 类名{//外部类
      修饰符 class 类名{//内部类
      }
}
  • 范例
public class Outer{
      pulbic class Inner{
     }
}

内部类的访问特点

  • 内部类可以直接访问外部类的成员,包括私有
public class Outer {
    private int num = 10;

    public class Inner {
        public void show() {//内部类访问外部类
            System.out.println(num);
        }
    }

    public void method() {//外部类访问内部类
        Inner i = new Inner();
        i.show();
    }
}
  • 外部类要访问内部类的成员,必须创建对象

2.成员内部类

按照内部类在类中定义的位置不同,可以氛围如下两种形式

  • 在类的成员位置:成员内部类
  • 在类的局部位置:局部内部类
    成员内部类,外界如何创建对象使用呢?
  • 格式:外部类名.内部类名 对象名=外部类对象.内部类对象
  • 范例:Outer.Inner oi=new Outer().new Inner();
Outer.Inner i=new Outer().new Inner();

这样做是把内部隐藏起来,不会让你直接访问,以下写法是不常见的

public class Outer {
    private int num=10;
    
    public class Inner{
    
        public void show(){
            System.out.println(num);
        }
    }
}

一般修饰符不会用public而是用private

public class Outer {
      private int num=10;
      
      private class Inner{
        public void show(){
            System.out.println(num);
        }
}
}

外界虽然无法访问里面的内容,但是外部类里面是可以访问的
例如:

public class Outer {
      private int num=10;

      private class Inner{
        public void show(){
            System.out.println(num);
        }
   }
      public void method(){  //外部类访问
          Inner i=new Inner();
          i.show();
      }
}

可以通过Outer的对象,调用method方法里面的show方法

public class InnerDemo {
    public static void main(String[] args) {
        //创建内部类对象,并调用方法
          Outer o=new Outer();
          o.method();
    }
}

步骤:创建Outer的对象调用method方法,在method方法内部创建了Inner对象,并调用了Inner的show方法
间接调用

3.局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量

public class Outer {
      private int num=10;

      public void method(){//方法里面创建class
          class Inner{//class Inner里面创建show()方法
              public void show(){//局部内部类外界是无法直接进行访问的,它也是要通过外部类的对象来间接访问
                  System.out.println(num);
              }
          }
          Inner i=new Inner(); //局部内部类也是间接调用,通过外部内对象调用它的成员方法,在方法内部创建局部内部类对象调方法
          i.show();
      }
}

4.匿名内部类

匿名内部类属于局部内部类的一种
前提:存在一个类或者接口,这里的类可以使具体类也可以是抽象类

  • 格式:
new 类名或者接口名(){
    重写方法
}
  • 范例:
new Inter(){
   public void show(){
   }
}

一个Outer匿名内部类

public class Outer {
    public void method(){
        new Inter(){
            public void show(){//重写Inter接口中的show方法
                System.out.println("匿名内部类");
            }
        };
    }
}

这样写仅仅是个对象

public class Outer {
    public void method(){
        new Inter(){
            public void show(){
                System.out.println("匿名内部类");
            }
        }.show();//加了一个.show();
    }
}
        };

这样写就是调用了show方法
一个Inter接口

public interface Inter {
    void show();
}

测试类

public class OuterDemo {
    public static void main(String[] args) {
        Outer o=new Outer();
        o.method();
    }
}

想多次调用输出show方法

public class Outer {
    public void method(){
        Inter i = new Inter(){//Inter换成对象
            public void show(){
                System.out.println("匿名内部类");
            }
        };
        i.show();
        i.show();
        i.show();
        i.show();
        i.show();
    }
}

本质:是一个继承了该类或者实现了该 的子类匿名对象

匿名内部类记得打分号

理想的咸鱼猿©个人笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值