您所在的位置:主页 > Java培训 >

Java局部内部类代码形式以及性质

时间:2014-04-03 10:08来源:未知 作者:疯狂java 点击:

  

  局部内部类也叫方法内部类,即在方法内定义的内部类。局部内部类的代码形式如下。

  public class Outer6{

  private String address;

  public void display(){//方法

  class Inner6{//局部内部类

  }

  }

  }

  局部内部类有以下性质。

  (1)与静态内部类类似,在局部内部类中,若定义的局部内部类的成员属性、局部内部类的成员方法参数以及外部类的成员属性同名,则如果是参数可以直接访问,如果是局部内部类得成员属性可以通过“this.属性名”来访问。如果是外部类的成员属性可以通过“外部类的类名.this.属性名”来访问。(2)在局部内部类中,如果要访问外部类的局部变量,则此变量必须是final修饰的,否则不能访问,因为方法的生命周期只是在调用是存在,方法调用完后就结束了。内部类实例化后并不随外部类成员方法的消失而消失,所以为了提高局部变量的生命周期必须用final来修饰。(3)由于内部类得对象中保存有外部类对象的引用,因而在内部类中不能定义静态的属性。(4)和非静态成员内部类类似,内部类得实例化必须实例化外部类。

  如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final 的。

  public class Tester {

  public static void main(String[] args) {

  A a = new A();

  C c = new C();

  c.shoutc(a.shout(5));

  }

  }

  ////////////////////////////////////////////////////////

  class A {

  public void shouta() {

  System.out.println("Hello A");

  }

  public A shout(final int arg) {

  class B extends A {

  public void shouta() {

  System.out.println("Hello B" + arg);

  }

  }

  return new B();

  }

  }

  ////////////////////////////////////////////////////////

  class C {

  void shoutc(A a) {

  a.shouta();

  }

  }

  广州疯狂软件教育中心拥有三大课程体系包括:Java课程、Android课程、iOS课程,最强实战讲师团队授课,本月免费训练营火热报名中,期待你电话或者QQ咨询。