内部类(补充)




内部类们

内部类好处:高内聚,低耦合,

比喻:外部类与内部类是密友

           外部类与其他类是普通朋友

           密友知道外部类所有的东西(包括private),普通朋友只能知道外部类公布的东西

非静态成员内部类

静态成员内部类

定义:等同于一个类的非静态成员属性方法

用static修饰的内部类,相当于一个外部定义的类!

性质:

一、访问自己的属性

                  (1)直接访问

                  (2)通过this访问

二、可访问外部类所有成员

三、如果内/外部类属性同名,可用

   外部类名.this.外部类成员变量--来访问

性质:

一、访问自己的属性

                  (1)直接访问

                  (2)通过this访问

静态只能和静态交流:只能访问外部类静态变量或方法

  但可以访问自己定义的任何成员,(默认情况下静态内部类的内部都是静态的

 同左

内部类的实例化途径有:

(1)通过外部类非静态方法实例化内部类

          |---实质上虚拟机隐含的实例化了部

            类(也就是内部类引用会默认连到

            外部类的对象上)

2)通过外部类的静态main方法实例化内部类

3)在内部类中通过this来表示内部类的实例

创建内部类对象:

(1)使用此外部类的对象的引用

     Outer out =new Outer();

     Inner inner=out.new Inner();

     inner.innerMethod();

(2)通过外部类对象来访问内部类的对象

  Outer1.Inner5  in5=new Outer5().new Inner5

内部类的实例化途径有: 

1对象创建不需要外部类对象

可以直接生成:

Outer.Inner outin=new Outer.Inner();

注意:

1静态成员内部类中,不能定义静态成员

2,成员内部类中,可以访问外部类的所有成员

3,内部类和外部类的实例变量可以共存

4,内部类中访问外部类中同名的实例变量,用

   外部类名。this。变量名

5,外部类的静态方法访问成员内部类,与在

  部类外部访问内部类一样

     Outer out =new Outer();

     Inner inner=out.new Inner();

     inner.innerMethod();

注意:

1可以声明static成员或非静态成员

2,外部类访问内部类成员可以通过:

    |----1)静态内部类类名.属性

        |----2)内部实例对象.属性

 

生产一个静态内部类不要外部类成员,这是静态内部类成员内部类的区别


局部内部类====方法内部类

匿名内部类

定义:在方法内部定义内部类

定义:就是没有名字的内部类

性质:

(1)可以定义与外部类同名的属性

      |--直接用变量名是内部类的

      |--外部类名.this.内部变量名是外部的

(2)访问外部类的局部变量(方法中的变量),

此变量必是final修饰的【因为方法的生命周期只是在调用时存在,

调用之后结束,内部类实例后,并不随着外部类成员方法的消失而消

失,为了提高局部变量的生命周期必须要final

(3)内部类不能定义静态的属性

不能定义任何静态成员,方法和类,并且不

能用publicprotectedprivatestatic,只能

创建匿名内部类的一个实例,一个匿名内部类肯定是在new

后面,用其隐含实现一个接口或实现一个类,因此匿名内部类为局

部内部类,所以,局部内部类的限制都对其生效!

访问局部内部类必须现有外部类对象

Outer out=new Outer();

out.method();//此方法中有Inner

一般静态类用的比较少


你可能感兴趣的:(java,虚拟机,android)