首先,我们先来说说这个内部类,再说匿名的内部类。
内部类:
定义:将一个类定义在另一个类的里面,对里面那个类就成为内部类(内置类,嵌套类)、
访问特点:
1,内部类可以直接访问外部类中的成员,包括私有成员。内部类之所以恩那个直接访问外部类中的成员,是因为内部类中持有了一个外部类的引用,格式为 “外部类名.this”
2,而外部类要访问内部类中的成员必须要建立内部类的对象。访问格式:当内部类定义在外部类的成员位置上,而且非私有,可以在外部其他类中,可以直接建立内部类对象。“外部类名.内部类名 = 外部类对象.内部类对象”Outer.Inner in = new Outer().new Inner();
3,当内部类在成员位置上时,就可以被成员修饰符修饰,比如,private:将内部类在外部类中进行封装。static:内部类就具备static的特性。当内部类被static修饰后,只能直接访问外部类中static成员。出现了访问局限。!!除了接口,内部类一般不会被public修饰
在外部其他类中,如何直接访问静态内部类的非静态成员呢?new Outer.Inner().function();在外部其他类中,如何直接访问静态内部类的静态成员呢?Outer.Inner.function();注意:当内部类中定义了静态成员,该内部类必须是静态的。当外部类中的静态方法访问内部类时,内部类也必须是静态的。
内部类的定义原则:
当描述事物的时候,事物的内部还有事物,该事物有内部类来描述,因为内部事物在是哟结果外部事物的内容。
再说说匿名内部类:
匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:内部类没有名字,但是,内部类必须是继承一个类或者实现接口
3,匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖,也可以理解为,带有函数体内容的对象
5,并且匿名内部类有一个标记,就是函数体的末尾有一个分号
6,使用匿名内部类的主要目的是,覆盖方法,简化书写。所以匿名内部类中定义的方法最好不要超过3个。
再说说我的理解我们什么时候需要用到这个匿名的内部类呢?
当我们需要使用一些特殊的对象,比如这些对象是固定不变的某些对象,比如星期,比如月份,我们需要在这每一个对象中让其具备某些功能,这个功能呢,我们不见得每个对象返回的都是一样的,所以我们就将这个功能抽象出来一个方法,然后让这些对象来具体实现。
所以我们就用到了匿名的内部类,这样做的好处即覆盖方法,又简化了书写。 |