首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

匿名部类何为匿名

学过Java的同学肯定听说过匿名部类, 不过不知道有没有仔细的深究过它, 比如为什么称之为匿名? 为什么也算是一个类,而且是内部类? 它和内部类有什么区别?...匿名部类 先来看一段匿名部类的代码, 这里需要先定义一个抽象类, abstract class Person { public abstract void doSomething(); }..., 匿名部类省去了实现一个 Person的具体类的步骤, 比如说上面的代码可以用这样的非匿名部类来实现, public class Student extends Person { public...Student person = new Student(); person.doSomething(); 匿名部类的核心 使用匿名部类,省去了新建一个类的过程。...所以现在知道匿名跟内部类是什么意思了吧。

69530
您找到你想要的搜索结果了吗?
是的
没有找到

java匿名部类

这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。 在使用匿名部类时,要记住以下几个原则:  ·匿名部类不能有构造方法。   ...·匿名部类不能定义任何静态成员、方法和类。   ·匿名部类不能是public,protected,private,static。   ·只能创建匿名部类的一个实例。  ...·一个匿名部类一定是在new的后面,用其隐含实现一个接口或实现一个类。   ·因匿名部类为局部内部类,所以局部内部类的所有限制都对其生效。  ...·内部类只能访问外部类的静态变量或静态方法。 匿名类和内部类中的中的this : 有时候,我们会用到一些内部类匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。...这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名 3.匿名部类的作用  Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。

93080

anonymousinnerclass(匿名部类)

anonymousinnerclass(匿名部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?...匿名部类在实现时必须借助一个接口或者一个抽象类或者一个普通类来构造,从这过层次上讲匿名部类是实现了接口或者继承了类,但是不能通过extends或implement关键词来继承类或实现接口。...几点说明: 一、由于匿名部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,匿名部类完全把创建对象的任务交给了父类去完成。...二、在匿名部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。...三、因为匿名部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名部类对象引用的变量类型一定是它的直接或间接父类类型。 四、注意匿名部类的声明是在编译时进行的,实例化在运行时进行。

42540

Java 匿名部类

Java 匿名部类 匿名部类的存在作用; interface Mesage{ public void print() ; } class Message implements Mesage...msg.print() ; } } 正常的规律一个接口或者抽象类需要有子类,子类要覆写所有的抽象方法;但如果,message子类只使用唯一的一次;所以,可以采用匿名部类的方式进行代码的简化...public static void fun(Message msg) { msg.print() ; } } 上述的简便方法,称为 匿名部类...使用匿名部类前提是:必须基于接口或抽象类的应用;可以简约了一个继承/接口实现的子类的产生。...匿名部类定义在方法中,方法的参数或者变量,要被匿名部类所访问,必须加上 final 关键字。 匿名部类帮助我们减少了无用的且必要的类的定义。

38510

java匿名部类简介

匿名部类也就是没有名字的内部类 正因为没有名字,所以匿名部类只能使用一次,它通常用来简化代码编写 但使用匿名部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名部类来实现抽象方法...这个时候就引入了匿名部类 实例2:匿名部类的基本实现 abstract class Person { public abstract void eat(); } public class Demo...实例3:在接口上使用匿名部类 interface Person { public void eat(); } public class Demo { public static void main...最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口 实例4:Thread类的匿名部类实现 public class Demo { public static...= 1; i <= 5; i++) { System.out.print(i + " "); } } }; t.start(); } } 运行结果:1 2 3 4 5 实例5:Runnable接口的匿名部类实现

62570

什么是匿名部类

匿名部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。...如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名部类】。...匿名部类的定义格式: 接口名称 对象名 = new 接口名称() { // 覆盖重写所有抽象方法 }; 对格式“new 接口名称() {…}”进行解析: new代表创建对象的动作 接口名称就是匿名部类需要实现哪个接口...{…}这才是匿名部类的内容 另外还要注意几点问题: 匿名部类,在【创建对象】的时候,只能使用唯一一次。...匿名部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】 强调:匿名部类匿名对象不是一回事!!!

22510

Java内部类-成员内部类、局部内部类匿名部类、静态内部类

在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类匿名部类和静态内部类。...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法或者该作用域。...(4)局部内部类访问外部类的成员属性或者方法时,直接访问; (5)外部类访问局部内部类的成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域。...匿名部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名部类的使用范围非常有限,大部分匿名部类用于接口回调。 匿名部类在编译的时候由系统自动起名为 Outer$1.class。...匿名部类主要用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。 匿名部类使用一次,就不再使用。

1K10

java_内部类匿名部类的使用

部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法 成员内部类 :定义在类中方法外的类。...class 内部类 { // 成员变量 // 成员方法 } } } 匿名部类 匿名部类 :是内部类的简化写法。...它的本质是一个 带具体实现的父类或者父接口的匿名的子类对象 匿名部类必须继承一个父类或者实现一个父接口。...new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 以接口为例,匿名部类的使用...定义一个没有名字的内部类 这个类实现了Swim接口 创建了这个没有名字的类的对象 匿名部类的使用场景 通常在方法的形式参数是接口或者抽象类时,也可以将匿名部类作为参数传递。

60930

Java中的内部类匿名部类详解

文章目录 内部类 什么是内部类 成员内部类 访问特点 匿名部类 前提 格式 使用方式 内部类 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。...比如,PersonHeart.class 匿名部类 匿名部类 :是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名部类了。...匿名部类就是做这样的快捷方式。 前提 匿名部类必须继承一个父类或者实现一个父接口。...格式 new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 使用方式 以接口为例,匿名部类的使用...,代码如下: 定义接口: public abstract class FlyAble{ public abstract void fly(); } 创建匿名部类,并调用: public class

1.4K30

Java内部类——静态和非静态内部类匿名部类、方法内部类

,并没有外部类的引用,也就无法调用外部类自己的方法,同时也就屏蔽了外部类的操作 但是如果在内部类中写上外部类的引用和get方法,就可以在这种定义方式的前提下获得外部类的引用了。...静态内部类和非静态内部类是有区别的: 内部类有外部类的this指针,但是静态内部类是没有外部类的this指针的,毕竟两者创建的时间也不用。...这就直接导致了静态内部类无法直接通过this指针访问外部类的变量。...静态内部类和内部类的调用方法也不同(这是当然的) image.png image.png 匿名部类 public class NoNameInnerClass { public static...new AA() { @Override public void aa() { System.out.println("匿名部类的方法执行

89530

Java学习笔记 (成员内部类、静态内部类匿名部类、方法内部类

部类中可以通过“ 类名· 成员名" 的方式直接访问内部类中静态成员 定义在外部类方法中的内部类, 也称局部内部类。 方法内部类只在其定义所在的方法的内部可见, 即只在该方法可以 使用。...方法内部类只在其定义所在的方法的内部可见, 即只在该方法可以使用。 方法内部类不能使用访问控制符和static 修饰符, 但可以使用final和abstract 修饰。...以这种方法定义的没有 名字的类称为匿名部类。...因匿名部类也是局部内部类, 所以局部内部类的所有限制都对其 生效。 一个匿名部类一定是在new 的后面, 用其隐含实现一个接口或继承一个类, 但是两者不可兼得。 只能创建匿名部类的一个实例。...匿名部类在编译的时候由系统自动起名为Outter $ 1 · class 一般来说, 匿名部类用于继承其他类或是实现接口, 并不需要增加额外的方法, 只是对继承方法的实现或是重写。

43620

Java基础系列(三十):局部内部类匿名部类

What 局部内部类就是定义在某个方法内部的内部类,它的作用域仅限于这个方法。 Why 当我们在外围类中定义的内部类仅仅在某个方法中使用了一次,这种情况下,我们就可以选择去使用局部内部类。...匿名部类 匿名部类其实就是对局部内部类的一个深化的应用,如果我们只是需要创建这个类的一个对象,那么我们完全不必去给这个类命名,这种类就被称为匿名部类。...t = new Timer(times, listner); t.start();} 这段语句的含义是:创建一个实现ActionListener接口的类的新对象,需要实现的方法定义在括号。...由于构造器的名字必须与类名相同,但是匿名类并没有类名,所以,匿名类不能有构造器。取而代之的是,将构造器参数传递给父类构造器。尤其是在内部类实现接口的时候,不能有任何构造参数。...如果构造参数的闭小括号后跟的是单引号,那么就是在构造一个类的新对象,如果说构造参数的闭小括号后面跟一个开大括号,正在定义的就是匿名部类

70230

Android(Java) | 你真的熟悉Java匿名部类吗(Java匿名部类的限制)

,会引用外部类实例 只能捕获外部作用域的final变量 创建时只有单一方法的接口可以用Lambda转换 a.匿名部类的名字 表面上是没有引用名的, 但其实是有用于定位的“名字”, ?...定义出来一个用于定位的“名字”, 这个“名字”可见上面代码的第二行, “com.bennyhuo.iiv.ch1.”即代码包名, “OuterClass$1”即外部名$1, 1代表这个匿名部类...定义出来一个用于定位的“名字”, 这个“名字”可见上面代码的第二行, “com.bennyhuo.iiv.ch1.”即代码包名, “OuterClass$1”即外部名$1, 1代表这个匿名部类..., 所以OuterClass()的实例也会在这里(左上第四行)new出来; 而下方的Client$1就是上述所说的匿名部类的类型了, Client$1的命名格式其实就是刚刚说的外部名$匿名部类序号...; 00 01 10 11 捕获 匿名部类 所在方法(外部作用域) 的 局部变量快照的情况 匿名部类重写父类方法时,引用到的外部方法体内的局部final变量 通常,要求要被捕获的局部变量

1.7K60
领券