匿名内部类

发布于:2024-07-06 ⋅ 阅读:(64) ⋅ 点赞:(0)

下面代码中,Person24 是一个抽象类,这意味着它不能被直接实例化,只能通过继承它的子类来实现其抽象方法。代码片段中展示了如何使用匿名内部类来实现一个抽象类的实例。

package chapter04;

public class Java24_Object_匿名内部类 {
    public static void main(String[] args) {
        // TODO 面向对象
        // 在某些场合下,类的名字不重要,我们只想要使用类中的方法或功能,那么此时我们可以采用特殊的语法:匿名类
        // 所谓匿名类,就是没有名字的类, 创建只使用一次的类的对象
        Me me = new Me();

        me.sayHello(new Person24() {
            @Override
            public String name() {
                return "zhangsan";
            }
        });
        // 上面匿名类的写法等价于下面的代码
        // 创建一个名为 Zhangsan 的类继承自 Person24
        class Zhangsan extends Person24 {
            @Override
            public String name() {
                return "zhangsan";
            }
        }
        // 创建 Zhangsan 类的实例并传递给 sayHello 方法
        Person24 person = new Zhangsan();
        me.sayHello(person);
    }
}

abstract class Person24 {
    public abstract String name();
}

class Me {
    public void sayHello(Person24 person24) {
        System.out.println("Hello, " + person24.name());
    }
}

下面代码片段中展示了如何使用匿名内部类来实现一个接口的实例。

package chapter04;

public class Java24_Object_匿名内部类 {
    public static void main(String[] args) {
        // 使用匿名内部类来实现接口 Fly24
        new Fly24() {
            @Override
            public void fly() {
                System.out.println("使用飞行器飞翔");
            }
        }.fly();
        // 上面匿名类的写法等价于下面的代码
        // 创建一个名为 PersonFly24 的类实现接口 Fly24
        class PersonFly24 implements Fly24 {
            @Override
            public void fly() {
                System.out.println("使用飞行器飞翔");
            }
        }

        // 创建 PersonFly24 类的实例并调用 fly 方法
        PersonFly24 personFly24 = new PersonFly24();
        personFly24.fly();
    }
}

// 接口中定义的属性都是常量,不能更改
// 接口中定义的方法都是抽象的
interface Fly24 {
    void fly();
}


网站公告

今日签到

点亮在社区的每一天
去签到