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

    }
}

结果展示

相关推荐
冉冰学姐25 分钟前
基于ssm的技能比赛报名管理系统29817vn0(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
java·数据库·spring·ssm 框架应用
代码雕刻家3 小时前
3.5.Maven-依赖管理-依赖配置&依赖传递
java·maven
!chen3 小时前
MyBatis-plus拓展之字段类型处理器、自动填充和乐观锁
java·tomcat·mybatis
Jin、yz4 小时前
JAVA 八股
java·开发语言
va学弟4 小时前
Java 网络通信编程(6):视频通话
java·服务器·网络·音视频
pjw198809034 小时前
Spring Framework 中文官方文档
java·后端·spring
jgyzl4 小时前
2026.3.11MyBatis-Plus基本使用与思考
java·数据库·mybatis
Full Stack Developme5 小时前
Java 常用通信协议及对应的框架
java·开发语言
( •̀∀•́ )9205 小时前
Spring Boot 启动报错 `BindException: Permission denied`
java·spring boot·后端
杰克尼5 小时前
苍穹外卖--day10
java·数据库·spring boot·mybatis·notepad++