欢迎访问宙启技术站
智能推送

内部类和匿名类的实现方法

发布时间:2023-09-29 09:10:33

内部类和匿名类都是在Java中用来实现更复杂的对象的方法。

内部类是一个定义在其他类中的类,它可以访问外部类的成员变量和方法。它的实现方法有三种:成员内部类、局部内部类和匿名内部类。

成员内部类是定义在一个类的内部,但在类的外部可以使用它。要在外部类中使用成员内部类,需要先创建外部类的对象,然后通过外部类对象创建成员内部类的对象。如下所示:

public class OuterClass {
    private int outerVar = 10;
    
    public class InnerClass {
        private int innerVar = 20;
        
        public void printOuterVar() {
            System.out.println("Outer var: " + outerVar);
        }
        
        public void printInnerVar() {
            System.out.println("Inner var: " + innerVar);
        }
    }
    
    public void useInnerClass() {
        InnerClass inner = new InnerClass();
        inner.printOuterVar(); // 输出:Outer var: 10
        inner.printInnerVar(); // 输出:Inner var: 20
    }
}

局部内部类是定义在方法内部的类,只能在方法内部使用。它的作用范围比成员内部类更小,但也可以访问外部类的成员变量和方法。如下所示:

public class OuterClass {
    private int outerVar = 10;
    
    public void useLocalClass() {
        int localVar = 20;
        
        class LocalClass {
            public void printOuterVar() {
                System.out.println("Outer var: " + outerVar);
            }
            
            public void printLocalVar() {
                System.out.println("Local var: " + localVar);
            }
        }
        
        LocalClass local = new LocalClass();
        local.printOuterVar(); // 输出:Outer var: 10
        local.printLocalVar(); // 输出:Local var: 20
    }
}

匿名内部类是没有名字的内部类,它通常用于创建一个只需要用一次的对象。匿名内部类可以实现一个接口或继承一个类,并且可以添加自己的方法和字段。如下所示:

public class OuterClass {
    public interface MyInterface {
        void doSomething();
    }
    
    public void useAnonymousClass() {
        MyInterface obj = new MyInterface() {
            @Override
            public void doSomething() {
                System.out.println("Do something!");
            }
        };
        
        obj.doSomething(); // 输出:Do something!
    }
}

在上面的例子中,匿名内部类实现了MyInterface接口,并覆盖了doSomething方法。

总的来说,内部类和匿名类都可以帮助Java实现更复杂的对象。内部类可以让一个类拥有更多的功能和细节,而匿名类可以让我们更方便地创建只需要用一次的对象。