什么是内部类
内部类是一个定义在另一个类内部的类。
内部类可分为四种:
1. 成员内部类: 定义在另一个类内部,且没有使用static修饰,且可以访问外部类所有的成员。要创建内部类的实例必须先存在外部类的实例。
- public class Outer {
- String name;
- class Inner {
- public void test() {
- System.out.println("Inner test" + name);
- }
- }
- public static void main(String[] args) {
- Outer outer = new Outer();
- Inner inner = outer.new Inner();
- outer.name = "Inner";
- inner.test();
- }
- }
复制代码 2. 静态内部类:用static修饰的内部类,创建内部类无需所外的外部类,可直接声明。
- public class Outer {
-
- public static class Inner {
- public void test() {
- System.out.println("Inner test");
- }
- }
-
- public void test() {
- Inner inner = new Inner();
- inner.test();
- }
-
- public static void main(String[] args) {
- Inner inner = new Inner();
- inner.test();
- }
- }
复制代码- import org.self.study.day2.inner.Outer.Inner;
- // 其他外部类
- public class Other {
- public static void main(String[] args) {
- Inner inner = new Inner();
- inner.test();
- }
- }
复制代码 3. 局部内部类 : 在方法内部、构造方法、代码块内部或者作用域内的类(if or for),外部无法访问,不能使用访问修饰符,可以访问外部类所有成员包括私有成员,可以访问方法中的final或等效final的局部变量
- public class Outer {
- public String name;
-
- String sex;
-
- private int age;
-
- protected String mark;
-
- public void test() {
- // 局部内部类
- class MethodInner {
- public void test() {
- System.out.println(name);
- System.out.println(age);
- System.out.println(mark);
- System.out.println(sex);
- System.out.println("MethodInner test");
- }
- }
-
- MethodInner methodInner = new MethodInner();
- methodInner.test();
- }
-
- public static void main(String[] args) {
- Outer outer = new Outer();
- outer.test();
- }
- }
复制代码 4. 匿名内部类:是一种特殊的内部类,它没有类名,通常用于只需要实现一次的实例类,匿名类在声明的同时实例化。通常用于接口实现或者继承类。
- Runnable r = new Runnable() {
- @Override
- public void run() {
- System.out.println("Hello from anonymous class!");
- }
- };
- new Thread(r).start();
复制代码 lambda表达式- Runnable r = () -> System.out.println("Hello from lambda!");
- new Thread(r).start();
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |