Java基础:内部类
Java基础:内部类
N种内部类
- 常见的内部类:
- 常规内部类
- 静态内部类
- 局部内部类
- 匿名内部类
常规内部类
-
没有 static 关键字修饰且定义在外部类中
-
内部类可以直接访问外部类的私有属性
-
示例:
public class Outer { private int id = 10; //私有属性 public void out() { System.out.println("这是外部类的方法"); } public class Inner { public void in() { System.out.println("这是内部类的方法"); } //获取外部类的私有属性 public void getID() { System.out.println(id); } } }
public class Application { public static void main(String[] args) { Outer outer = new Outer();//实例化外部类 outer.out(); //通过外部类来实例化内部类 Outer.Inner inner = outer.new Inner();//实例化内部类 inner.in(); inner.getID(); } }
输出
这是外部类的方法 这是内部类的方法 10
静态内部类
-
与常规内部类不同,静态内部类有 static 关键字修饰且定义在外部类中
-
不能直接访问外部类的非静态属性
-
示例
public class Outer { private static int id = 10; //私有属性 public static class Inner { //静态内部类只能直接访问外部类的静态属性 //获取外部类的静态属性 public void getID() { System.out.println(id); } } }
public class Application { public static void main(String[] args) { Outer outer = new Outer(); //通过外部类来实例化内部类 Outer.Inner inner = new Outer.Inner();//实例化静态内部类 inner.getID(); } }
输出
10
局部内部类
-
定义在方法体或语句块中的类
-
不能加访问任何修饰符
-
示例:
public class Outer { public void method() { //第一种局部内部类 class Inner{ } } } //一个java类中,可以有多个class类,但是只能有一个public类 //第二种局部内部类 class A{ }
匿名内部类
-
没有名字初始化类,不用将实例保存到变量中
-
示例:
public class Test { public static void main(String[] args) { //没有名字初始化类,不用将实例保存到变量中 new Apple().eat(); //匿名内部类 new UserService() { //匿名内部类 @Override public void hello() { } }; } } class Apple { public void eat(){ System.out.println("1"); } } interface UserService{ void hello(); }