内部类是啥
一、内部类定义
一个类可以包含属性、方法,实际上java的类也允许类嵌套,即类中也可以包含类,被包含的类就叫内部类。代码形式如下:
class Outer{
private String name = "我是私有属性";
public void info(){
Inner inner = new Inner();
inner.print();
}
// 定义内部类
class Inner {
public void print(){
System.out.println(Outer.this.name);
}
}
}
public class InnerClassDemo {
public static void main(String[] args) {
Outer out = new Outer();
out.info();
}
}
我是私有属性
二、内部类的作用
内部类的存在从结构角度实际上是破坏了正常类的结构,之所以还存在内部类主要还是因为内部类可以无限制的访问外部类的私有属性。
三、内部类说明
- 内部类可以访问外部类的私有成员和方法,外部类也可以轻松访问内部类的私有成员和方法;
- 使用内部类后,内部类和外部类间的不需要通过setter或getter方法进行访问;
- 内部类只给其外部类使用,可以用private修饰;
内部类是延时加载的,也就是说只会在第一次使用时加载。不使用就不加载。 调用构造方法时,外部类Outer被加载,但这时其静态内部类却未被加载。直到调用该内部类的静态方法,静态内部类才被加载。
四、static定义的内部类
static定义的内部类可以理解成是一个外部类,static定义的都是独立于类的结构。
五、方法中定义的内部类
内部类可以在任意结构中定义,包括类、方法、代码块。方法中定义的内部类如下:
class Outer{
private String name = "我是私有属性";
public void info(){
// 定义内部类
class Inner {
public void print(){
System.out.println(Outer.this.name);
}
}
new Inner().print();
}
}
public class MethodInnerClass {
public static void main(String[] args) {
new Outer().info();
}
}
六、匿名内部类
七、闭包
闭包也称为lambda表达式,在其他条件满足的情况下,它是可以只使用一个 -> 操作符创建带有单个参数的对象。
Runnable runner = () - > {System.out.println("Run!");};