java内部类

内部类的分类:

  1. 非静态内部类
  2. 静态成员内部类
  3. 局部内部类
  4. 匿名内部类

成员内部类

  • 定义:在一个外部类中有成员变量和成员方法,那么成员内部类就是整个一个类当成外部类的成员对待
  • 访问方式:内部类访问外部类,内部类可以直接访问外部类,包括私有成员变量,因为内部类拥有外部类的引用是类名.this
  • 外部类访问内部类,外部类访问外部类的成员,必须要建立内部类的对象,
  • 格式:外部类名.内部类名 = 外部类对象.内部类对象()
    存放位置:在外部类里,在外部类的成员方法外
public class Outer {

    class Inter {
        public void speak() {
            System.out.println("我是内部类");
        }
    }
}

Outer.Inter inter = new Outer().new Inter();
inter.speak();

静态内部类

  • 定义:就是在成员内部类的基础上加上static
  • 格式: 外部类名.内部类名 = 外部类.内部类对象()
public class Outer {
    static class Inter {
        public void speak() {
            System.out.println("我是静态内部类");
        }
    }
}

Outer.Inter inter = new Outer.Inter();
inter.speak();

局部内部类

  • 定义:在外部类成员方法中定义的内部类,他更像局部变量
  • 注意:
    • 方法内部类只能在定义该内部类的方法中使用,不可以在此方法外对其实例化
    • 与局部变量一样,方法的内部类修饰符只有final 和abstract
    • 静态方法内的方法内部类,静态方法是没有this引用的,因此在静态方法内的内部类遭遇同样的待遇,即:只能访问外部类的静态成员
public void Outer() {
    class Inter {
        public void speak() {
            System.out.println("我是局部内部类");
        }
    }

    Inter inter = new Inter();
    inter.speak();
}

匿名内部类

  • 没有名字的内部类,他是内部类的简化写法
  • 主要为了实现接口或者继承外部类
public interface Speak {
    public void speak();
}

public class Outer {
    public void speak() {
        new Speak() {
            public void speak() {
                System.out.println("我是匿名内部类");
            }
        }.speak();
    }
}

new Outer().speak();

你可能感兴趣的:(Java学习)