java中的内部类和匿名内部类的使用

Java内部类与匿名类实战详解 Java内部类是定义在另一个类中的类,它可以访问外部类的所有成员,包括私有成员。内部类提供了更好的封装性和独立性。成员内部类是定义在外部类的成员位置(即方法之外)的内部类。它们拥有与外部类成员变量相似的属性,包括权限修饰符(如public, private, protected等)。一个外部类可以有多个成员内部类,每个内部类都可以有其独立的作用域,拥有各自的状态和行为。成员内部类可以访问外部类的所有成员(变量和方法),包括私有成员,但外部类要想访问内部类的成员,需要通过创建内部类的实例来实现。 阅读详情

部分内容参考http://www.imooc.com/
内部类:


什么是 Java 中的内部类
问:什么是内部类呢?
答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!
答:内部类的主要作用如下:
1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便,重写外部类的方法
问:内部类有几种呢?
答:内部类可分为以下几种:
1. 成员内部类
2. 静态内部类
3. 方法内部类
4. 匿名内部类

下面是一个内部类例子

//外部类HelloWorld
public class HelloWorld {

    // 内部类Inner,类Inner在类HelloWorld的内部
    public class Inner {

        // 内部类的方法
        public void show() {
            System.out.println("welcome to imooc!");
        }
    }

    public static void main(String[] args) {

        // 创建外部类对象
        HelloWorld hello = new HelloWorld();
        // 创建内部类对象
        Inner i = hello.new Inner();
        // 调用内部类对象的方法
        i.show();
    }
}

匿名内部类:
是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体>
作用是:
1.和内部类一样,可以对外部类进行扩展,重写或新增加方法。
2.用于实现接口
3.没有类名

//新建一个接口
public interface Animal {
    void eat();

    void sleep();
}

//新建一个类,在类里面使用 内部类和内部匿名类去实现接口
public class Zoo {
    private class Tiger implements Animal {
        public void eat() {
            System.out.println("tiger eat");
        }

        public void sleep() {
            System.out.println("tiger sleep");
        }
    }

    /**
     *  这里不明白,Animal不是接口么,怎么可以定义方法?
     *  ---答案 接口可以作为返回类型,指定返回的类型必须是实现当前接口的类.
     * @return
     */

    /**
     * // 由于接口不是不能实例化的,所以必须通过类来实现,这里使用返回一个(已实现该接口的对象)
     * 具体写法有两种,写法2容易理解
     * @return
     */
    //---------------------------写法1-----匿名内部类--------------------------------
    Animal getAnimal1(){
        return new Animal(){
            public void eat() {
                System.out.println("---1---animal eat");
            }

            public void sleep() {
                System.out.println("---1---animal sleep");
            }
        };
    }


    //---------------------------写法2------内部类--------------------------
    Animal getAnimal2(){
        return new TempAnimal();
    }

    class TempAnimal implements Animal{
        int a = 0;
        public void eat() {
            System.out.println("---2---animal eat");
        }

        public void sleep() {
            System.out.println("---2---animal sleep");
        }   
    }

}

//新建一个测试类
public class Test {
    public static void main(String[] args) {
        Zoo z = new Zoo();
        Animal an = z.getAnimal1();
        an.eat();
        an.sleep();


        Animal one = z.getAnimal2();
        one.eat();
        one.sleep();
    }
}
匿名内部类是内部类的一种简化写法:return new Wrapper{...};等价于:Wrapped extends Wrapper{...}return new Wrapped();难道匿名内部类就只这一点作用吗?考虑一下这样的case:

interface ICount {
    int count();
}

class Parent {
    int i = 0;

    int count() {
        return i++;
    }
}
有一个类Child,它既想继承Parent的count()方法,又想实现ICount接口中的count方法,这个时候怎么办呢?内部类就可以大显身手了:

class Child extends Parent {
    ICount getCount() {
        return new ICount {
            int i = 0;

        int count() {
            return (i *= 2);
        }
    }
}
C++语言程序设计教程第4版杨进才沈显君课后习题答案解析 为了更好地学习这门课程,我尝试在网上寻找一些学习资料和参考书籍,但效果并不是很理想。因此,我希望能有一些学长学姐或者是有经验的程序员能够分享一些学习经验和方法,让我更好地掌握这门课程。学习过程中,我发现这本书的内容非常丰富,讲解也非常详细,对于像我这样编程基础薄弱的学生来说,是一本非常实用的教材。同时,我也希望有经验的程序员能够推荐一些适合初学者的C++语言学习资料和工具,以便我能更好地学习和掌握这门课程。总之,希望能得到大家的帮助和支持,让我更好地学习和掌握C++语言程序设计。主 编: 杨进才,沈显君。 阅读详情

相关推荐

滚动时域优化方法

滚动时域优化(Receding Horizon Optimization, RHO),也被广泛称为模型预测控制(Model Predictive Control, MPC),是一种用于动态系统优化和控制的。其核心思想是“在每个当前时刻k,控制器只考虑未来一个(称为“预测时域”或“优化时域”,长度N)内的系统行为。(通过测量或估计得到)。(描述状态如何随输入和干扰变化)。(如果有,可能基于历史数据或假设)。在这个有限的未来时域[k, k+N-1]上,求解一个。这个优化问题的目标是找到一个。

m0_69522810的博客 2291

JAVA 第六章 内部类与匿名类

全文大量涉及上转型对象与接口回调,请事先熟悉。

m0_68638157的博客 376

手把手教你用UC3842搭建12V/5A反激电源(附PSIM仿真文件)

本文详细介绍了基于UC3842的12V/5A反激电源设计与PSIM仿真实践。从UC3842芯片选型、高频变压器计算到PSIM仿真模型搭建,提供完整的开关电源设计流程。特别包含PCB布局要点和实测优化建议,帮助工程师快速掌握反激电源开发技巧。

u6v7w8x的博客 1202

Java创建动物类

仅供参考! 1.创建动物类 public class Animal { public void eat() { System.out.print("can eat 1 (1表示草,2表示肉)"); } public void sleep() { System.out.println(" also can sleep"); } static class Rabbit extends Animal { void

weixin_46718081的博客 5415

Coding Plan:程序员真实工作的可执行编码决策框架

Coding Plan 是一种面向工程实践的编码决策方法论,它超越传统学习路径,聚焦于代码在真实业务系统中的上下文对齐、影响控制与可演进性保障。其核心在于将模糊的开发直觉转化为可度量、可验证、可协作的日常动作,涵盖目标对齐、上下文锁定、验证闭环、协作契约和演进预留五大锚点。结合2026年AI辅助编码新范式,它强调将大模型作为‘上下文翻译器’而非代码生成器,并通过分钟级工作块、技术债主动发行、可观测性前置等机制,显著提升交付确定性与系统长期健康度。本文详解该框架的底层逻辑与落地实践。

weixin_33326218的博客 437

高效IT运维报告编写指南:实战经验与模板分享

本文提供了一份全面的IT运维报告编写指南,涵盖实战经验与实用模板分享。文章详细解析了高效运维报告的核心要素,包括结构设计、数据收集自动化和可视化技巧,并提供了月度报告和故障分析报告模板。通过自动化工具和写作技巧,帮助团队提升报告质量,支持决策和问题追踪。

u5v6w7的博客 926

Java内部类(静态内部类、匿名内部类等)详解

总结了常见的四大内部类(成员内部类、静态内部类、局部内部类、匿名内部类)相关知识,通过写代码详细讲解了静态内部类和匿名内部类,成员内部类和局部内部类使用较少就没有写代码举例。

???? 6120

超详细!新手必看STM32-DMA配置与实验(串口使用DMA发送数据)

DMA就是:直接存储器访问。DMA传输数据从一个地址空间复制到另一个地址空间,提供在外设和存储器或者存储器和存储器之间的高速数据传输。

qq_1033275663的博客 2万+

【Java】匿名内部类的使用详解

匿名内部类是Java中的一种局部内部类,它没有显式的类名,通常用来实现接口或者继承一个类并重写其方法。匿名内部类是一个表达式,它创建了一个新的类的实例,并在声明时进行初始化。匿名内部类在Java中是一个强大的工具,它们允许开发者在不创建命名类的情况下实现接口或扩展类,简化了许多常见的编程任务。然而,随着Java 8及更高版本的引入,Lambda表达式和方法引用提供了更为简洁和现代的替代方案。匿名内部类用于实现接口或扩展类,适合用于一次性实现。

u013675821的博客 5286

RK3568笔记十七:LVGL v8.2移植

若该文为原创文章,转载请注明原文出处。本文介绍嵌入式图形库移植到Linux开发板ATK-RK3568上的步骤。

4230

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

ARINC 653 在综合模块化航空电子设备(IMA)的发展进程中扮演着极为关键的角色。从行业应用的实际情况来看,空客 A380 和波音 787 等先进飞机的航电系统套件充分体现了行业对 IMA 的高度重视和积极投入。在 IMA 架构下,核心软件具备强大的能力,能够支持多个航空电子应用程序的同时运行。这些应用程序可以并行开发,并高效地部署在同一个计算平台上,极大地提高了开发效率和系统集成度。ARINC 653 的出现为航空电子行业创造了一个充满活力和竞争力的商业环境。

2956

Kotlin和Java在匿名内部类和接口的使用中的区别及对比

在 Kotlin 中,当局部变量被匿名内部类或 lambda 捕获并修改时(如代码中的 count),编译器会将其包装为堆内存中的可变对象,此时不会再对原局部变量保存副本,而是通过共享这个包装对象实现变量的统一访问。Kotlin 的接口中可以直接实现方法,这是 Kotlin 接口与 Java 早期版本接口的重要区别(Java的接口中是不能实现方法的,Java 8+ 才通过 default 关键字支持类似功能)。Kotlin 接口中方法的两种形式。

123 307

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

[密码学实战]商密TLCP协议抓包解析与深度分析(二十九)

曼岛_的博客 631

【Java基础】匿名内部类

详细讲解Java的匿名内部类的定义,使用方法,使用例子

小吉妙妙屋 1万+

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java匿名内部类,什么是匿名内部类,如何定义匿名内部类,如何使用匿名内部类?

java匿名内部类什么是匿名内部类?匿名内部类的使用场景?匿名内部类如何创建?匿名内部类的实现和使用例1(实现接口)例2(继承类) 什么是匿名内部类? 匿名内部类,顾名思义,就是不知道这个类到底是什么名字,也就是不知道类名。 匿名内部类的使用场景? 匿名内部类适合创建那种只需要使用一次的类,也就是说创建一个匿名内部类,只需要用一次即可。 匿名内部类如何创建? new 类名(参数) | 实现接口...

y2227605053的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Java中的匿名内部类及其使用技巧

前言在介绍匿名内部类之前,首先我们应该先来了解一下内部类及局部内部类: 内部类 内部类(inner class)是定义在另一个类中的类,内部类中的方法可以访问创建该内部类的类(我们称其为外围类 outer class)的域中所有数据(包括私有/private数据)。并且,内部类可以对同一个包中的其他类隐藏起来。 但是由于内部类是一种编译器现象,在虚拟机中只存在常规类文件,所以在编译过程中

tick_tock97的博客 2万+

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java中的内部类

匿名内部类是没有名称的内部类。在Java中调用某个方法时,如果该方法的参数是接口类型,除了可以传接口实现类外,还可以使用实现接口的匿名内部类作为参数,在匿名内部类中直接完成方法的实现。}}@OverrideSystem.out.println("学生韩梅梅正在吃饭");}}@OverrideSystem.out.println("老师李华正在吃饭");}}}}}}}@OverrideSystem.out.println("学生韩梅梅正在吃饭");}...

yahid的博客 1万+

匿名内部类

匿名内部类 匿名内部类:没有名称的类,主要用来创建对象(只创建一次) 匿名内部类需要通过父类或者接口实现。 语法: 父类名/接口名 对象名 = new 父类名/接口名 { 重写的父类的方法 或 实现的接口中的方法 }; 示例1: 父类: public class A { public void fun(){ System.out.println("A...

哈 2061

Java中的内部类和匿名内部类

Java中的内部类提供了一种灵活且强大的方式来组织代码和隐藏实现细节。通过内部类,我们可以实现更好的封装和代码重用。匿名内部类则是内部类的一种特殊形式,常用于实现接口或继承类,并在创建时直接实例化。匿名内部类是Java中一种强大且灵活的工具,它允许我们在不定义新类的情况下实现接口或继承类。它们特别适用于一次性操作、事件监听、线程创建等场景。然而,在使用匿名内部类时,我们也需要注意其限制和注意事项,以确保代码的正确性和可读性。

编程小弟的博客 1315

Java8匿名内部类

前言: 本篇文章讲解java的匿名内部类,匿名内部类,顾明思意,是一个没有显示名字的内部类,其实质是对内部类的简化写法,匿名内部类会隐式的实现一个接口或者继承一个类。 匿名内部类适合创建只使用一次的类,如果一个类只使用一次的话就无须使用平时常用的方法,继承或者实现父类后,再去实例化对象,使用匿名内部类可以简化这个编程的过程,并且不会编译生成单独的.class文件。 匿名内部类的语法: 1:基础语法 new 类名/接口/抽象类(){ }; 2:实现普通类的匿名内部类 public c.

houkun_dobest的博客 1035

Java基础 - 内部类03 - 匿名内部类详解

1.什么是匿名内部类 定义 : 1.匿名内部类是定义在类的局部位置,如方法中、代码块中,且没有明确的类名; 2.是一个内部类,本质还是一个类; 3.没有类名; 4.同时还是一个对象。 2.匿名内部类的特性(关键) * 1.匿名内部类可以访问所有的外部类的成员,包括私有的; * 2.不能添加访问修饰符,因为匿名内部类也是一个局部变量; * 3.作用域 : 仅在定义它的方法或代码块中有效; * 4.匿名内部类 访问 外部类的成员的方式

northcastle的博客 1万+

java 匿名内部类_java匿名内部类

匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可...

weixin_42292855的博客 242

匿名内部类简要分析

目录什么是匿名内部类?匿名内部类的使用场景?匿名内部类如何创建?匿名内部类的实现和使用例1(实现接口)例2(继承类) 什么是匿名内部类? 匿名内部类,顾名思义,就是不知道这个类到底是什么名字,也就是不知道类名。 匿名内部类的使用场景? 匿名内部类适合创建那种只需要使用一次的类,也就是说创建一个匿名内部类,只需要用一次即可。 匿名内部类如何创建? new 类名(参数) | 实现接口() { // 匿名内部类的类体部分 } 从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父

胡毛毛的博客 988

Java学习之匿名内部类(非常重要)

匿名内部类、对象实例、外部类名+$ +序号

wjkqq0921的博客 2197

Java匿名内部类和使用

一.匿名内部类 匿名内部类适合创建那种只需要一次使用的类,例如前面介绍命令模式时所需要的Command对象,匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类的定义立即消失,匿名内部类不能重复使用。 语法格式一般如下: //匿名类可以是实现接口 或则继承类 new 实现接口() | 父类构造器 (实参列表){   //匿名内部类的类体部分 } 从上面可以看出,匿名内部类必须继承一个父类,或者实现一个接口,但最多只能继承一个父类,或者实现一个接口。 关于匿名内部类还有如下两条规则

u013217730的博客 449

java的匿名内部类-使用new对象后接大括号{}

【代码】java使用new对象后接大括号{}

luyao3038的博客 1361
上一篇: c++之超越c的语法04-变量作用域
LinuxJoey
博客等级 码龄15年 117粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值