猪莫慌

java内部类详解

一:内部类基础

  定义:java中,将一个类定义在一个类内部的类叫内部类。

  位置:1->成员位置处  2->方法体内  3->方法参数位置

  种类:成员内部类、局部内部类、匿名内部类、静态内部类

二:成员内部类

  定义在成员位置处的类。

  

   Circle类称为外部类,成员内部类可以无条件访问外部类的所有成员属性和方法(包括private成员和静态成员)。

  

  当成员内部类和外部类有同名成员变量或方法时,默认访问成员内部类的成员。

  若要访问外部类成员,需要以下形式进行访问。

    外部类.this.成员变量

    外部类.this.成员方法

  外部类访问内部类成员,需要创建内部类对象进行访问。

  

  创建内部类对象的方式:

    1:Outer.Inner inner = new Outer().new Inner();

    2:Outer outer = new Outer();

       Outer.Inner inner = outer.new Inner();

   成员内部类可以被public、protected、默认访问修饰符、private修饰。

   public:本类、同包类、子类、不同包

   protected:本类、同包类、子类(不同包中的子类亦可)

   默认:本类、同包类

   private:本类

   外部类只可以被public和默认访问修饰符修饰,且同一文件下至多有一个public修饰的类。

 三:局部内部类

   定义在方法体内部的类,访问权限仅限于方法内。

  

  注:局部内部类就像方法中的局部变量一样,不能有public、protected、private和static修饰符。

 四:匿名内部类

    匿名内部类就是没有名字的内部类。

  因为没有名字,因此每次调用只能使用一次,常常用来简化代码编写。

  使用匿名内部类有个前提条件:必须继承父类或实现一个接口,或者继承父类且父类方法可重写。

  例1:不使用匿名内部类

  

  例2:在抽象类上使用匿名内部类

  

  例3:在接口上使用匿名内部类

  

  例3:在可继承类且父类方法可重写的类上使用匿名内部类

  

   匿名内部类不能有访问修饰符和关键字static修饰,匿名内部类是唯一没有构造器的类,多数情况下用在接口回调。

五:静态内部类

  定义在类中,并且用static修饰符修饰。

  和类的静态成员类似,在没有外部类的对象情况下,可以创建内部类的对象,创建方式如下:

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

  静态内部类不能使用外部类的非ststic成员属性和方法。

  例:

  

 

  

 

  

 

  

 

 

  

  

posted on 2019-08-10 11:33  猪莫慌  阅读(711)  评论(0编辑  收藏  举报

导航