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();

    }
}

结果展示 :

相关推荐
2301_780789662 小时前
跨平台适配!SDK 游戏盾兼容全终端游戏场景
java·网络·ddos
学长毕设2 小时前
基于springboot的食品仓库管理系统
java·spring boot·后端
步行cgn3 小时前
FormHttpMessageConverter 详解:Spring MVC 中表单数据的读写转换器
java·spring·mvc
龙亘川3 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
金銀銅鐵3 小时前
[Java] 用 CLI 展示 EnumMap 增删键值对时的内部变化
java·源码·ai编程
秋天的怀念_David4 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Raas1004 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
niucloud-admin4 小时前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
霸道流氓气质5 小时前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
captain3765 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis