内部类

Ⅰ概述

在Java中,可以将一个类的定义到另外一个类的定义内部,这就是内部类。内部类本身就是类的一个属性,与其他属性定义方式一致。

Ⅱ分类

内部类可以分为四种:成员内部类、局部内部类、匿名内部类和静态内部类。

Ⅲ定义

class outClass{
    //...//外部类成员变量
    class innerClass1{
       //成员内部类成员
    }
    public void method(){
        class innerClass2{
            //局部内部类成员
        }   
    }
    static class innerClass3{
        //静态内部类成员
    }
}

Ⅳ成员内部类

创建
成员内部类依赖于外部类的实例,它的创建方式:外部类实例.new 内部类()

outClass out=new outClass();
outClass.innerClass1 inner1=out.new innerClass1();

注意点

①成员内部类可以访问外部类所有的变量和方法,包括静态和非静态,私有和公有。
②成员内部类不能定义静态成员。
③成员内部类的创建依赖于外部类实例。

Ⅴ静态内部类

创建
静态内部类不依赖于外部类,它的创建方式:new 内部类()

outClass.innerClass3 inner3=new innerClass3();

注意点

①静态内部类只可以访问外部类的静态变量和方法
②静态内部类不能与外部类同名
③静态内部类的创建不依赖于外部类实例。

Ⅵ局部内部类

创建
局部内部类定义在方法内,它的创建方式:new 内部类()

 public static void testStaticFunctionClass(){
    class Inner {
    }
    Inner  inner = new Inner();
 }

注意点

①局部内部类只可以访问方法中final修饰的局部变量
②局部内部类不能被public\protected\private\static修饰。

Ⅶ匿名内部类

定义

public class Outer {
 
    private void test(final int i) {//final修饰
        new Service() {
            public void method() {
                    System.out.println("匿名内部类"+i);//参数只能是final修饰的
            }
        }.method();
    }
 }
 //匿名内部类必须继承或实现一个已有的接口 
 interface Service{
    void method();
}

创建
匿名内部类必须继承或实现一个已有的接口 ,它的创建方式:

new/接口{ 
  //匿名内部类实现部分
}

注意点

①匿名内部类必须继承一个抽象类或者实现一个接口
②匿名内部类不能有构造函数
③匿名内部类不能定义任何静态成员
④匿名内部类只能创建一个实例。
⑤匿名内部类不能被public\protected\private\static修饰。
⑥匿名内部类只可以访问方法中final修饰的局部变量

Ⅷ内部类的优点

①一个内部类对象可以访问创建它的外部类对象的内容,包括私有数据!
②内部类不为同一包的其他类所见具有很好的封装性
③内部类有效实现了“多重继承”,优化 java 单继承的缺陷

Ⅸ内部类应用场景

①一些多算法场合
②解决一些非面向对象的语句块。
③适当使用内部类,使得代码更加灵活和富有扩展性。
④当某个类除了它的外部类,不再被其他的类使用时。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值