java学习之---内部类

来源:互联网 发布:海外阿里云服务器租用 编辑:程序博客网 时间:2024/05/21 19:22

1、内部类,顾名思义,一个类在另一个类的内部。那么sun公司为什么会增加这个语言特性呢?学习内部类的语法和语义之前,我对这个问题比较好奇,查看了Thinking in Java,是这样解释的:

一般来说,内部类继承自某个类或实现某个接口,内部类可以操作创建它的外围类的对象,所以可以认为内部类提供了某种进入其外围类的窗口。这样一来,就有一个问题了。如果只是需要实现一个接口,那么为什么不通过外围类实现那个接口呢?答案是:如果外围类能够满足需求,那么就用外围类。但是二者实现接口的区别是,外围类不是总能享用到接口带来的方便,而内部类最吸引人的原因是:每个内部类都能独立的继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口)的实现,对于内部类都没有影响的。

如果没有内部类提供的可以继承多个具体或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效的是实现了"多重继承"。也就是说,内部类允许继承多个非接口类型(类或抽象类)。

2、内部类的基本语法:

主要分为成员内部类和局部内部类

(1)成员内部类:在类中引入一个类,和成员变量、方法同一级别

    1>  内部类有普通类的共有特性:继承某个类、实现某个接口、可以是abstract、final、static等

    2>  非静态成员内部类:

a: 内部类可以访问外部类的所有成员(属性和方法),即使这些成员是private的。因为类中的private在类的任何范围内都可见,当然在内部类中可见。内部类是通过指向外部类对象的引用来访问这些成员的:outclass.this,默认是省略的。

b:非静态内部类中不能有静态的成员(属性或方法)。

c:同理,外部类也可以访问内部类的所有成员,即使这些成员是private

    3>  静态成员内部类:

a:静态成员内部类是类的范畴,没有指向外部类的对象引用了,也就不能在内部类中使用外部类的非静态方法。

b:静态成员内部类中可以有静态成员。

c:静态成员内部类可以在外部类的静态方法中使用。

(2)局部内部类:定义在方法中的内部类,与方法中的局部变量时同一级别。

     1>局部内部类只能在方法内使用,所以访问控制符、static关键字对局部内部类是没有意义的;但是可以用final修饰为不可继承。

     2>  非静态方法中的局部内部类也包含了一个隐含的指向外部类对象的引用,通过这个引用,可以访问外部类的成员;对于该方法内部的局部变量,若想在局部内部类中使用,则该变量需要是final的。

     3>  局部内部类不能包含静态成员(变量和方法)

(3)匿名内部类:

     1>是内部类,但没有名字;不能显式的添加构造方法;没有任何修饰符;无法继承类或实现接口。

     2>  匿名内部类和抽象类型绑定在一起的,通过接口或抽象类来使用匿名内部类,语法是:

              new 抽象类型(构造方法参数){

                     实现抽象类型的抽象方法

               }

      3>  两种抽象类型实现的形式相同,唯一的区别就是通过接口实现时,没有构造方法的,而通过抽象类继承时,就可以有构造方法。



0 0
原创粉丝点击