Java匿名内部类

匿名内部类 是一种特殊的内部类,它没有显式的类名,而是在创建对象时直接定义和实例化一个类

匿名内部类的主要用途是实现接口或继承抽象类,它允许在创建对象的同时编写类的定义和实现接口或抽象方法。由于匿名内部类没有名字,因此它只能在创建对象时使用,并且无法被重用。

匿名内部类的格式如下:

复制代码
new 父类构造器(参数列表)|实现接口(参数列表){
    //匿名内部类的类体部分
}
java 复制代码
package com.jsu.java;

public interface Action {
    public abstract void study();
}
java 复制代码
package com.jsu.java;

public abstract class Person {
    //私有数据成员
    private String name;
    private int age;
    //构造方法
    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //setter,getter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    //抽象方法
    public abstract void say();
}
java 复制代码
package com.jsu.java;

public class Student extends Person{         //继承
    public Student() {
    }

    public Student(String name, int age) {
        super(name, age);
    }

    @Override //覆写person类的中的抽象方法
    public void say() {
        System.out.println("姓名:" + getName() + ",年龄:" + getAge());
    }
}
java 复制代码
package com.jsu;

import com.jsu.java.Action;
import com.jsu.java.Person;
import com.jsu.java.Student;

public class Demo001 {
    public static void main(String[] args) {
        Demo001.fun1(      //匿名内部类,实现了接口
                new Action(){
                    public void study() {//实现了接口的抽象方法
                        System.out.println("正在勤奋学习!!!");
                    }
                }
        );
        Person swk = new Student("美猴王",18);//父类型引用实例化子类型对象
        Demo001.fun2(swk);
        Demo001.fun2(     //匿名内部类做参数
                new Person("沈括",58) {
                    public void say() {  //实现抽象类的Person的抽象方法
                        System.out.println("匿名内部类的say:姓名:" + getName() + ",年龄:" + getAge());
                    }
                }
        );
    }

    public static void fun1(Action action) {     //接口作参数
        action.study();

    }
    public static void fun2(Person person) {     //抽象类作参数
        person.say();

    }
}

结果展示

相关推荐
952364 分钟前
RabbitMQ-基础操作
java·spring boot·分布式·后端·spring·rabbitmq
卓怡学长32 分钟前
w266基于spring boot + vue 圣地延安美食乐享系统
java·数据库·vue.js·spring boot·spring·intellij-idea
C++、Java和Python的菜鸟1 小时前
第7章 Java高级技术
java·开发语言
程序员佳佳1 小时前
模型网关灰度不是调百分比:把放量、观测和回滚做成账本
java·数据库·人工智能·redis·gpt·aigc·embedding
Listen·Rain2 小时前
Springboot整合Ollama实现调用本地多模型
java·spring boot·后端
霸道流氓气质2 小时前
Java 工程师 AI 智能体(Agent)完整学习路线
java·人工智能·学习
aaPIXa6223 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
SunnyDays10113 小时前
Java 编辑 PDF:从增删改查到加密保护
java·修改 pdf·编辑 pdf
球king3 小时前
CC GUI 插件:在 IDEA 中使用 CodeX
java·ide·intellij-idea
山塘小鱼儿3 小时前
Agent多轮对话调用MCP Tools
java·ai·ai编程