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

    }
}

结果展示

相关推荐
一只叫煤球的猫1 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
斐波娜娜1 小时前
Maven详解
java·开发语言·maven
Bug退退退1231 小时前
RabbitMQ 高级特性之事务
java·分布式·spring·rabbitmq
程序员秘密基地1 小时前
基于html,css,vue,vscode,idea,,java,springboot,mysql数据库,在线旅游,景点管理系统
java·spring boot·mysql·spring·web3
皮皮林5511 小时前
自从用了CheckStyle插件,代码写的越来越规范了....
java
小码氓1 小时前
Java填充Word模板
java·开发语言·spring·word
会飞的天明1 小时前
Java 导出word 实现饼状图导出--可编辑数据
java·word
Muxiyale2 小时前
使用spring发送邮件,部署ECS服务器
java·服务器·spring
01传说2 小时前
vue3 配置安装 pnpm 报错 已解决
java·前端·vue.js·前端框架·npm·node.js
hunzi_13 小时前
搭建商城系统
java·uni-app·php