xbamboo

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2016-03-27

内部类:就是把一个类的定义放在另外一个外围类定义的里面。

class OutterClass{
          class InnerClass {
        }
}

 1. 内部类主要有四种:成员内部类(member)、静态内部类(static)、局部内部类(local)、匿名内部类(anonymous)

(1)成员内部类:这种内部类的方法可以直接使用外部类实例变量和实例方法,包括private。

                        不能含有static方法,不能有static变量,static final除外;可以继承有static方法的类。

                        成员内部类如果有与外部类同名的成员变量和方法,默认情况访问成员内部类成员,如果访问外部类变量和方法,

OuterClass.this.variable
OuterClass.this.method
View Code

                       外部类要访问内部类成员,需要先new一个内部类对象,再通过指向这个对象的引用来访问。

(2)静态内部类:将内部类声明为static,也叫作嵌套类。

                        与静态方法类似,只能访问外部类的static成员,不能直接访问实例变量和实例方法,需要通过对象引用。

                        静态内部类中可以包括static成员和方法。

public class Outer{
      private static class Inner{
          //name of this class is Outer.Inner
     }
     private Inner x;
     public Outer(){
         x=new Inner();}
     public static void main(String[] a) {
             Inner x = new Inner();
             new Outer();
}
}
View Code

 

(3)局部内部类:在method或者statement中定义的类。

                        局部内部类与局部变量类型,不能使用private、public等访问修饰符,也不能使用static,可以使用final和abstract

                        局部内部类只在这个方法之内有效。

                        局部内部类可以访问外部类成员。                 

(4) 匿名内部类:就是没有名字的局部内部类,不用关键字class、extend、implement,没有constructor。其根本是把类的定义和创建放在了一起,一般格式是

new ClassOrInterfaceName() {    } 

                          匿名内部类可以继承一个类或者实现一个接口。

                          匿名内部类使用的参数必须是final。

在生成的class文件中,匿名类会生成 类名$1.class 的文件,数字根据是第几个内部类而以此类推。

2. 内部类的继承

普通类extend内部类。因为内部类的constructor必须连接到指向外部类对象的引用,所以当一个类继承这个内部类的时候,那个连接到外部类的引用也要初始化。

class WithInner{
    class Inner{}
}

public class InheritInner extends WithInner.Inner {
     InheritInner(WithInner wi){
         wi.super();
    }
    public static void main(String[] args){
         WithInner wi = new WithInner();
         InheritInner ii = new InheritInner(wi);
}
} 
View Code

 

每一个内部类可以独立的继承一个接口或者类,无论外围类是否继承了某个接口或者类,对内部类都没有影响。再加上java提出了一个类可以实现多个接口,所以内部类和接口解决了java不能多重继承的问题。这也是java和C++的区别之一,C++可以多重继承。

 

资料来源:感谢各位的分享,希望慢慢能了解透彻

http://www.tuicool.com/articles/n2aYra7

http://www.cnblogs.com/dolphin0520/p/3811445.html

http://android.blog.51cto.com/268543/384844/

http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html

 

posted on 2016-03-28 09:15  xbamboo  阅读(196)  评论(0编辑  收藏  举报