精华内容
下载资源
问答
  • 说说对匿名内部类理解
    2021-10-29 15:19:17

    1、匿名内部类本质是一个实现了某个接口或者继承了某个类的子类匿名对象。

    2、匿名内部类是创建子类对象的快捷方式,它是将定义子类重写接口或者父类的抽象方法和创建子类对象两个步骤合二为一了。

    更多相关内容
  • java中匿名内部类详解

    2020-08-30 19:47:50
    主要对java中的匿名内部类的详细总结,需要的朋友可以参考下
  • 本篇文章介绍了,java中匿名内部类解读分析。需要的朋友参考下
  • Java基础之匿名内部类匿名内部类是什么?为什么要用匿名内部类匿名内部类详解。 什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类。 下面先看一个例子,比如说你想和你的女...

    Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。

    什么是匿名内部类?

    顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类。
    下面先看一个例子,比如说你想和你的女朋友去看春节档的《唐人街探案三》

    这个时候我们要先定义一个接口,去看唐探3的接口

    public interface MyInterface {
        // 看电影的抽象方法
        void watchFilm();
    }
    

    OK!现在我们有了一个接口,接口里面有一个看电影的抽象方法。而现在你要去看电影了,你要实现接口里面的方法,但是接口不能直接 new 出来,所以你就要先定义一个实现类去实现这个接口,代码如下:

    public class MyInterfaceImpl implements MyInterface{
    
        public void watchFilm() {
            System.out.println("实现方法里带着女朋友去看电影!");
        }
    }
    

    现在我们实现了这个接口,也可以去看电影了,我们现在要写一个主方法;

    public class GoWatchFilm {
        public static void main(String[] args) {
            MyInterfaceImpl myInterface = new MyInterfaceImpl();
            myInterface.watchFilm();
        }
    }
    

    而这个时候,我们要先 new 一个看电影的实现类,然后调用里面看电影的方法,如图:
    在这里插入图片描述
    现在你和你心爱的女朋友成功的看到了电影…
    因为我们已经知道多态,我们还可以使用多态的方式," = " 的左边时接口,右边是实现类也是没毛病的,
    在这里插入图片描述
    到这里!那么问题来了,这个电影你就看了一次,只有在 new 的时候才看了一次,没有再看第二次。所以这个时候我们就可以使用 匿名内部类 了。

    如果接口的实现类(或者父类的子类)只需要使用唯一一次,那么这种情况下我们就可以省略掉对该类的定义,而改为使用匿名内部类。

    匿名内部类的定义格式:
    上面我们有说到接口不能直接 new ,如果直接new就会报错,而这次,我们就直接new接口,但是这里的new和new对象又有一点小差别,格式如下:

    接口名称 对象名 = new 接口名称(){
    	 // 覆盖重写所有抽象方法
    }
    

    那我们就代码实现一下:
    在这里插入图片描述
    如上图,我们new了一个接口,而接口下面的 { } 里面就是一个匿名内部类,所以现在我们使用匿名内部类就可以带着女朋友把电影看玩了,而之前我们定义的一个实现类就可以不用了,虽然说这样写法有点怪异,但是我们是想带着女朋友看电影,并且这个电影只需要看一次就行了,往后就不看了,却还要写一个实现类去实现它,使用匿名内部类就可以省掉一个类的单独定义,看到这想必小伙伴已经对匿名内部类了解的差不多了,不过匿名内部类也有一些注意事项,我们接着往下看。

    匿名内部类的注意事项:

    首先对格式 “new 接口名称 () {…}” 进行解析:

    1.new 代表创建对象的动作;

    2.接口名称就是匿名内部类需要实现哪个接口;

    3. {…} 这才是匿名内部类的内容; PS:没有class,没有名称

    另外还要注意以下几点问题:
    如果现在你的女朋友还想要看完电影去吃个海底捞,那么我们现在在接口里再写一个方法。并且第二天的时候你美丽的女朋友还要重复昨天做的事情,看电影,吃火锅,开始撸代码:

    public interface MyInterface {
        // 看电影的抽象方法
        void watchFilm();
        // 吃海底捞的抽象方法
        void eatHotPot();
    }
    
    public class GoWatchFilm {
        public static void main(String[] args) {
           /* MyInterface myInterface = new MyInterfaceImpl();
            myInterface.watchFilm();*/
            MyInterface day01 = new MyInterface() {
                @Override
                public void watchFilm() {
                    System.out.println("第一天在匿名内部类里面实现了带女朋友看电影了!!!!!!");
                }
                @Override
                public void eatHotPot() {
                    System.out.println("第一天看完电影我们去吃一个火锅吧!!!!");
                }
            };
            day01.watchFilm();
            day01.eatHotPot();
            // 来一条分割线
            System.out.println("-------------------------------------------------------------------------------------------");
            new MyInterface() {
                @Override
                public void watchFilm() {
                    System.out.println("第二天在匿名内部类里面实现了带女朋友看电影了!!!!!!");
                }
                @Override
                public void eatHotPot() {
                    System.out.println("第二天看完电影我们去吃一个火锅吧!!!!");
                }
            }.watchFilm();
            new MyInterface() {
                @Override
                public void watchFilm() {
                    System.out.println("第二天在匿名内部类里面实现了带女朋友看电影了!!!!!!");
                }
                @Override
                public void eatHotPot() {
                    System.out.println("第二天看完电影我们去吃一个火锅吧!!!!");
                }
            }.eatHotPot();
    
        }
    }
    

    输出内容:

    第一天在匿名内部类里面实现了带女朋友看电影了!!!!!!
    第一天看完电影我们去吃一个火锅吧!!!!
    -------------------------------------------------------------------------------------------
    第二天在匿名内部类里面实现了带女朋友看电影了!!!!!!
    第二天看完电影我们去吃一个火锅吧!!!!
    

    可以看到,当我们第一天的时候,看完电影再吃火锅时是用的匿名内部类,是有对象名称的,可以直接用对象名称调用吃火锅和看电影的方法,而当第二天想再次调用的时候如果我们是用到了匿名对象,是直接new接口没有对象名称就要new两次,然后分别调用看电影和吃火锅,并且每次都要重写接口里的所有方法。

    1、匿名内部类,在创建对象的时候只能使用一次,如果希望多次创建对象,而且内容一样的话,那么此时我们就要使用单独定义的实现类了。
    2、匿名对象,在调用方法的时候,只能调用唯一一次,如果希望同一个对象调用多次方法,就必须给对象起一个名字。
    3、匿名内部类是省略了“实现类/子类名称”,但是匿名对象是省略了“对象名称

    到这里小伙伴们差不多已经知道匿名内部类的含义了吧,并且我们什么时候能用到匿名内部类,什么时候要定义一个实现类去实现接口里的方法了吧!!!!

    展开全文
  • 一、什么是内部类?or 内部类的概念 内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。...3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。 三、 内部类的分类 成员内部

    一、什么是内部类?or 内部类的概念

    内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。

    public class TestA{
        class TestB {}
    }
    

    二、 为什么需要内部类?or 内部类有什么作用?

    1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。
    2、内部类可以对同一个包中的其他类隐藏起来。
    3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。

    三、 内部类的分类

    成员内部类,局部内部类,匿名内部类,静态内部类

    3.1 成员内部类

    成员内部类:存在于某个类的内部,与全局属性或者方法同级的内部类就是成员内部类。
    举一个成员内部类实例:

    public class Person{
        public void run(){}
        public class DoWork implements Work{}
    }
    

    成员内部类特点:

    1、(重要)成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括静态成员和私有成员)。!!很重要
    2、成员内部类和外部类的属性和方法名同名时,外部类的属性和方法会隐藏;但可以通过外部类.this.成员变量的方式访问外部类的属性和方法。
    3、 外部类必须通过成员内部类的对象来访问内部类的属性和方法。
    4、 成员内部类对象会隐式的引用一个外部类对象。(可以解释第一点)
    5、 成员内部类可以有public\private\protected以及默认访问权限。

    3.2 局部内部类

    举一个局部内部类实例:

    public class Person{
        public void run(){
             class DoWork implements Work{}
        }
    }
    

    注意:和成员内部类的区别,局部内部类在方法里面

    局部内部类:是定义在一个方法或者一个作用域里面的类。它与成员内部类的区别在于局部内部类的访问仅在于方法内或者作用域内。
    局部内部类的特点:

    1、 不能有private、public、protected和static等修饰符,与局部变量类似。
    2、只能在定义局部内部类的方法或者作用域中实例化;
    3、 局部内部类的对象不能使用该内部类所在方法或者作用域的非final局部变量(为什么?);

    3.3 匿名内部类
    举一个匿名内部类实例:

    public class Person{
        public DoWork doSomething(){
            return new DoWork(){
                public void do(){}
            };
        }
    }
    

    什么是匿名内部类:不定义类的名字,在使用的地方直接定义对象。
    匿名内部类的特点:

    1、唯一一种没有构造器的类;匿名内部类在编译时,编译器会自动起名xxx$1.class;
    2、 匿名内部类不能存在任何静态的变量、方法等;
    3、 匿名内部类是局部内部类的特例;
    4、大部分匿名内部类用于接口返回;

    3.4 静态内部类

    举一个静态内部类实例:

    public class Person{
        public void run(){}
        public static class DoWork implements Work{}
    }
    

    注意和成员内部类的区别
    静态内部类:在成员内部类的基础上加上一个static关键字就是静态内部类。
    静态内部类的特点:

    1、不需要依赖外部类。
    2、不能使用外部类的非静态属性和方法。

    例题:

    下列说法正确的是(AB)?

    A、对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们
    B、 成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)
    C、由于匿名内部类只能用在方法内部,所以匿名内部类的用法与局部内部类是一致的
    D、静态内部类可以直接访问外部类的非静态成员

    展开全文
  • 主要介绍了详解Java 匿名内部类的相关资料,帮助大家更好的理解和学习java 内部类的相关知识,感兴趣的朋友可以了解下
  • 匿名内部类理解

    2022-02-03 11:56:57
    看到匿名内部类的时候,我想哪里有内部类的事了,匿名内部类不就是省了定义子类的过程了么。那匿名内部类的匿名和内部都代表什么? 冷静一想,匿名内部类一定要在一个类中定义啊,没有定义的子类就是【匿名内部类】...

    看到匿名内部类的时候,我想哪里有内部类的事了,匿名内部类不就是省了定义子类的过程了么。那匿名内部类的匿名和内部都代表什么?

    冷静一想,匿名内部类一定要在一个类中定义啊,没有定义的子类就是【匿名内部类】啊
    一个例子:
    以下是一个局部内部类
    在这里插入图片描述
    采用匿名内部类的方式就是省去了TimePrinter子类的定义
    在这里插入图片描述
    但是TimePrinter类是定义在一个TalkingClock类中的,我们可以看到匿名内部类是有内部类的特点:可以访问外围类的字段,例如beep

    《java核心技术》的内容

    展开全文
  • 在那些修改中,引人注目的是内部类匿名类。如运用得当,它们可使程序更易理解和维护。本文介绍内部类匿名类在Java代码中是如何具体工作的,如何正确使用它们,以及如何避免一些常见的错误。 下面来看看这些特性...
  • 匿名内部类

    千次阅读 多人点赞 2018-09-22 14:12:02
    “所谓匿名内部类,是指可以利用内部类创建没有名称的对象,它一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到类里面的成员”来描述,或许要更好理解一些。 下面,我们来看一段代码: ...
  • 程序员你真的理解匿名内部类吗?

    万次阅读 多人点赞 2019-10-10 22:22:30
    为了加深各位对匿名内部类的印象、好奇心以及求知的渴望,咋们先来看一个程序,如果提到线程你会不会立马想到接口和继承?如果提到接口和继承你会不会立马想到匿名内部类? 开篇甜点 为了加深各位对匿名内部类的...
  • 理解Java内部类与匿名内部类的区别

    千次阅读 2020-12-02 18:55:33
    内部类内部类基本概念 如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象。这时,为了方便设计和访问,直接将A类定义在B类中。就可以了。A类就称为内部类内部类可以直接访问外部类中的成员。而外部类...
  • 使用匿名内部类课使代码更加简洁、紧凑,模块化程度更高。内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到。然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式...
  • 及其其中的回调函数,例如,我们给Button设置监听器时候通常要实现OnCLickListener接口,并重写其中的Onclick()方法,这就是匿名内部类与回调函数,那么你对Java匿名内部类以及回调函数又理解多少呢?这篇文档给予...
  • Lambda表达式与匿名内部类

    千次阅读 2019-04-24 19:27:55
    匿名内部类适合创建那种只需要一次使用的类,匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类定义立刻消失,匿名内部类不能重复使用(一次性的) 定义匿名内部类的格式如下: new...
  • 匿名内部类讲解 1.定义 我们在使用对象的时候,假如对对象只使用一次,就定义为匿名对象。 同样,假如一个功能,单单指只靠方法是实现不了的。只能定义成一个类的形式,才能实现这个功能(就是我们所说的内部类)...
  • 主要介绍了java 中匿名内部类的实例详解的相关资料,这里提供实例来帮助大家学习理解这部分内容,需要的朋友可以参考下
  • 放在一个类的内部的类我们就叫内部类。 一、成员内部类 定义在类内部的非静态类,就是成员内部类。 public class Out { private static int a; private int b; public class Inner { public void print()...
  • 06年写的在使用匿名内部类时,当使用了反射机制来调用其中的方法就会出现访问异常,这是在前几天写程序时遇到的,所以在写匿名内部类时一定要注意是否在其它地方使用了反射调用。下面给出部份代码来说明此问题。...
  • Java 快速理解匿名内部类 这篇文章主要讲解Java中匿名内部类的使用以及注意事项。匿名:没有名字的意思。内部类:写在其他类内部的类。匿名内部类的作用是简化代码。 原本我们需要创建子类或者实现类,去继承父类...
  • 匿名内部类 匿名内部类是没有名字的类,它主要是为了重写抽象类和接口中的抽象方法(全部) 下面通过代码演示可以清晰的感受到匿名内部类的用法及优点 1.省略继承的过程 public class NoName { public static void ...
  • 匿名内部类理解与使用

    千次阅读 2018-03-22 21:47:19
    首先展示的是普通多态的代码: //定义接口 interface Student{ void eat();//定义抽象方法 } class People implements Student{ public void eat() { System.out.println(...匿名内部类其实就是一个匿名子类对象 
  • Java匿名内部类使用与示例

    千次阅读 2021-02-25 19:47:42
    在不同的包内的内调用的protected方法(其实,也可以理解和第一个原因是一样的)匿名类继承了父类,并调用了父类的protected方法条件:匿名类完成上述使命,则需要继承一个或者实现某个接口形式:new 示例1:/**...
  • 深入理解Java?内部类

    2021-01-20 03:36:17
    内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类  内部类的共性  (1)、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。 ...
  • Java 1.1通过对Java语言规范进行...在那些修改中,最引人注目的就是内部类匿名类。如运用得当,它们可使程序更易理解和维护。本文来看看这些特性具体是如何工作的,如何正确使用它们,以及如何避免一些常见的错误。
  • Java 局部内部类、匿名内部类详解

    千次阅读 2019-08-19 00:34:02
    外部类与内部类 众所周知,每个java文件必须有一个与这个java文件同名的外部类,这个外部类可以是public或default的。而除了这个同名外部类,还可以有与这个同名外部类平级的其他外部类,但它们必须是default的。 而...
  • 这篇文章是对自己学习的一个总结,学习资料是... 什么情况下使用内部类:如果一个内部类只在某个外部类中可以使用到,一旦这个内部类离开这个外部类后就没有意义,那么这个内部类就可以定义成内部类。比如创建一个C...
  • 匿名内部类的使用

    2020-10-27 23:52:45
    匿名内部类的使用 首先先搞定什么事匿名内部类 顾名思义,匿名内部类就是省去命名的类 上代码 public static void main(String[] args) { new fulei() { void test2() { System.out.println("内部类2"); } ...
  • java中匿名内部类理解

    千次阅读 多人点赞 2016-11-22 23:22:32
    java中匿名内部类理解昨天晚上看json解析方式时突然看到关于匿名内部类,自己想了下发现竟然从来没有认真考虑过匿名内部类为什么叫这个,然后去网上查了下好像也没看出什么头绪来,早上上班看到一篇文章一下子就...
  • 匿名内部类详解

    万次阅读 多人点赞 2016-05-18 23:58:07
    第一篇博客,由于最近一直在学习Java所以最近的博客主要都是...先举个例子吧,给大家看一下什么是匿名内部类,Endeavor刚刚接触的时候,觉得哇哦,好奇怪的样子,这也太别扭了吧,不知道大家是什么感觉。 为了进行对比

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,837
精华内容 34,334
关键字:

匿名内部类怎么理解