java内部类

内部类分四类:成员、局部、静态和匿名

内部类也是一个独立的类,生成的class文件,名称是 外部类¥内部类.class

内部类相当外部类的一个成员,可以访问外部类的成员属性,包括Private的

成员内部类
class Outer {
    class inner {
        static int a = 10;//编译出错,成员内部类不能有任何静态声明
    }
}

访问内部类的唯一途径是通过外部的实例对象
注意在创建非静态内部类对象时,一定要先创建起相应的外部类对象。至于原因: 非静态内部类对象有着指向其外部类对象的引用

普通内部类可以用this引用当前对象,如果内部类中引用外部类的当前对象 外部类.this。

用static 修饰的内部类为静态内部类。
静态类没有指向外部类的引用。

静态内部类中有 静态方法,静态成员变量,而在非静态类中则不行

Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块之内。

  A、局部内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
  B、局部内部类对象不能使用该内部类所在方法的非final局部变量。

局部内部类更像一个局部变量。可以用于修饰局部内部类的只有final和abstract。
静态方法是没有this引用的,因此在静态方法内的内部类遭受同样的待遇,即:只能访问外部类的静态成员。

继承式的匿名内部类:

class Car {   
   public void drive(){
        System.out.println("Driving a car!");
    }}
   class Test{
    public static void main(String[] args) {
        Car car = new Car(){
            public void drive(){
                System.out.println("Driving anothercar!");
            }       
        };
        car.drive();
}}
接口式的匿名内部类:
interface  Vehicle {
      public void drive();
  }    
class Test{
      public static void main(String[] args) {
         Vehicle v = new Vehicle(){
              public void drive(){
                  System.out.println("Driving a car!");
              }
         }; 
        v.drive();
  }
参数式的匿名内部类:

class Bar{
    void doStuff(Foo f){}
}
interface Foo{
    void foo();
}
class Test{
    static void go(){
       Bar b = new Bar();
        b.doStuff(new Foo(){
            public void foo(){
               System.out.println("foofy");           
            }       
    });   
}}

你可能感兴趣的:(内部类)