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

    }
}

结果展示

相关推荐
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维6 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子7 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34167 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体18 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18098 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18098 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假9 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
资生算法程序员_畅想家_剑魔9 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin