Java的内部类

1、内部类的分类

(1)静态内部类

(2)成员内部类

(3)局部内部类-本地类

(4)匿名内部类

1.1、静态内部类

特点:
1.它可以定义静态和非静态的成员;

2.它仅仅可以访问外部类的静态字段和静态方法。

如何实例化:
Outer.Inner inner = new Outer.Inner();

1.2、成员内部类

特点:
1.除了static final修饰的编译时常量成员外,内部只能定义非静态成员;

2.可以访问外部类所有的成员,包括静态和非静态的;

如何实例化:
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
或者
Outer.Inner inner = new Outer().new Inner();

1.3、局部内部类-本地类

特点:
1.可以定义在一个方法里面或者{}代码块里面。 (是的,你没听错,可以在方法里面定义类)

2.类声明不能使用任何访问修饰符。

3.除了static final修饰的编译时常量成员外,内部只能定义非静态成员。

4.可以访问外部类所有的成员,包括静态和非静态的。

demo:
public class NewEnclosing { 
    {
	    class BlockLocal{ 
    	    void print(){
        	    //....
            }
	    } 
    }
 
    void run() {
        class Local { 
            static final int a=3; // 正确
            static int b=5; // 错误
            static final Object obj=null //错误,非编译时常量
            String c;//正确
            double d;//正确
 
            void run() {
                // method implementation
            }
        }
        Local local = new Local();
        local.run();
    }
 
    @Test
    public void test() {
        NewEnclosing newEnclosing = new NewEnclosing();
        newEnclosing.run();
    }
}

1.4、匿名内部类

特点:
1.匿名类是一次性使用的类,可以用于实现一个接口或者抽象类仅仅临时用一次,不能复用。

2.除了static final修饰的编译时常量成员外,内部只能定义非静态成员。

3.可以访问外部类所有的成员,包括静态和非静态的。

demo:
先定义一个抽象类:
abstract class SimpleAbstractClass {
    abstract void run();
}

然后看如何定义匿名类:
public class AnonymousInnerTest {
     
    @Test
    public void whenRunAnonymousClass_thenCorrect() {
        SimpleAbstractClass simpleAbstractClass = new SimpleAbstractClass() {
            void run() {
                // method implementation
            }
        };
        simpleAbstractClass.run();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值