Java认真看

内部类

2017-06-22  本文已影响0人  STEVENNO1

Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类。内部类又分为:==成员内部类==、==局部内部类==、==匿名内部类== 和 ==静态内部类== 四种。

静态内部类

  1. 静态内部类的创建是不需要依赖于外围类的。
  2. 静态内部类不能使用任何外围类的非static成员变量和方法。

内部类内要创建静态内部类,此内部类也需要是要静态内部类

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

匿名内部类

继承一个父类或者实现一个接口,例如Android中OnClickListener。

  1. 使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。
  2. 匿名内部类中是不能定义构造函数的。
  3. 匿名内部类中不能存在任何的静态成员变量和静态方法。
  4. 匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。
  5. 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。
public abstract class Bird {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public abstract int fly();
}
public class Test {  
    public void test(Bird bird){
        System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");
    }
    public static void main(String[] args) {
        Test test = new Test();
         test.test(new Bird() { 
         public int fly() {
            return 10000;
         } 
         public String getName() {
                return "大雁";
          }
       });
    }
}

在Test类中,test()方法接受一个Bird类型的参数,同时我们知道一个抽象类是没有办法直接new的,我们必须要先有实现类才能new出来它的实现类实例。所以在mian方法中直接使用匿名内部类来创建一个Bird实例。由于匿名内部类不能是抽象类,所以它必须要实现它的抽象父类或者接口里面所有的抽象方法。

成员内部类

  1. 成员内部类中不能存在任何static的变量和方法。
  2. 成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
OuterClass outerClass = new OuterClass();
OuterClass.InnerClass innerClass = outerClass.new InnerClass();

局部内部类

嵌套在方法和作用于内的。

上一篇 下一篇

猜你喜欢

热点阅读