精华内容
下载资源
问答
  • 匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:new(){//类的主体};这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使...

    匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。其语法形式如下:new()

    {

    //类的主体

    };

    这种形式的 new 语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。使用匿名类可使代码更加简洁、紧凑,模块化程度更高。

    匿名类有两种实现方式:

    1、继承一个类,重写其方法。

    2、实现一个接口(可以是多个),实现其方法。

    下面通过代码来说明。public class Out

    {

    void show()

    {

    System.out.println("调用 Out 类的 show() 方法");

    }

    }

    public class TestAnonymousInterClass

    {

    //在这个方法中构造一个匿名内部类

    private void show()

    {

    Out anonyInter=new Out()

    {

    //获取匿名内部类的实例

    void show()

    {

    System.out.println("调用匿名类中的 show() 方法");

    }

    };

    anonyInter.show();

    }

    public static void main(String[] args)

    {

    TestAnonymousInterClass test=new TestAnonymousInterClass();

    test.show();

    }

    }

    程序的输出结果如下:调用匿名类中的 show() 方法

    从输出结果可以看出,匿名内部类有自己的实现。

    提示:匿名内部类实现一个接口的方式与实现一个类的方式相同,这里不再赘述。

    匿名类有如下特点。

    (1) 匿名类和局部内部类一样,可以访问外部类的所有成员。如果匿名类位于一个方法中,则匿名类只能访问方法中 final 类型的局部变量和参数。public static void main(String[] args)

    {

    int a=10;

    final int b=10;

    Out anonyInter=new Out()

    {

    void show()

    {

    //System.out.println("调用了匿名类的 show() 方法"+a);    //编译出错

    System.out.println("调用了匿名类的 show() 方法"+b);    //编译通过

    }

    };

    anonyInter.show();

    }

    (2) 匿名类中允许使用非静态代码块进行成员初始化操作。Out anonyInter=new Out()

    {

    int i;

    {    //非静态代码块

    i=10;    //成员初始化

    }

    public void show()

    {

    System.out.println("调用了匿名类的 show() 方法"+i);

    }

    };

    (3) 匿名类的非静态代码块会在父类的构造方法之后被执行。

    展开全文
  • public class Test {...匿名内部类//主要是针对那些不能直接创建对象的抽象类和接口而来的Student stu=new Student();System.out.println(stu.getClass());//class com.aowin.noname.Student//4.1.通过实体类创...

    public class Test {

    public static void main(String[] args) {

    //4.匿名内部类

    //主要是针对那些不能直接创建对象的抽象类和接口而来的

    Student stu=new Student();

    System.out.println(stu.getClass());//class com.aowin.noname.Student

    //4.1.通过实体类创建匿名内部类对象

    //相当于创建该类的一个子类对象

    Person p=new Person(){

    public void eat(){

    System.out.println("吃八元套餐");

    }

    };

    p.eat();

    System.out.println(p.getClass());//class com.aowin.noname.Test$1//系统自动为子类命名Test$1

    Dog dog=new Dog();

    dog.bark();

    //4.2.通过抽象类创建匿名内部类对象

    //相当于定义了该抽象类的一个子类对象,并重写了抽象类中所有的抽象方法

    Animal an=new Animal(){

    public void bark(){

    System.out.println("汪汪汪...");

    }

    };

    an.bark();

    //返回的是包名加类名

    System.out.println(an.getClass());//class com.aowin.noname.Test$2

    //4.3.通过接口创建匿名内部类对象

    //相当于定义了该接口的一个实现类对象,并重写了接口中所有的抽象方法

    Sportable s=new Sportable(){

    public void sport(){

    System.out.println("打篮球");

    }

    };

    s.sport();

    System.out.println(s.getClass());//class com.aowin.noname.Test$3

    }

    }

    //实体类

    class Person{

    public void eat(){

    System.out.println("吃饭");

    }

    }

    class Student extends Person{

    public void eat(){

    System.out.println("吃八元套餐");

    }

    }

    //抽象类

    abstract class Animal{

    public abstract void bark();

    }

    class Dog extends Animal{

    public void bark() {

    System.out.println("汪汪...");

    }

    }

    //接口

    interface Sportable{

    public abstract void sport();

    }

    内部类

    package thinking.learnInternalClass.hengbao;

    public class DotNew {

    public class Inner{

    }

    public static void main(String[] args) {

    DotNew dn=new DotNew();

    DotNew.Inner dni=dn.new Inner();

    }

    }

    //要想直接创建内部类的对象,不能按照想象的方式,去引用外部类的名字DotNew,而必须使用外部类的对象来创建内部类对象,

    展开全文
  • 匿名内部类有时候我们需要临时创建一个类和对象并且这个类无需在其他地方复用,就可以使用匿名内部类匿名内部类的好处是不需要单独开一个类文件来编写,也不需要类名称,临时使用很方便。但是匿名内部类没有名字也...

    匿名内部类

    有时候我们需要临时创建一个类和对象并且这个类无需在其他地方复用,就可以使用匿名内部类。

    匿名内部类的好处是不需要单独开一个类文件来编写,也不需要类名称,临时使用很方便。

    但是匿名内部类没有名字也就没有构造器,不能直接实例化。

    同时匿名内部类只能实现一个接口,这一点从使用方式上就可以看出来。

    实现接口的匿名内部类

    匿名内部类多用于临时实现一个接口,可以直接现场定义并实例化。

    定义规则:

    Interface in = new Interface() {

    }

    这里看上去是new一个接口实际上这里是语法糖,Java实际上是新建了一个实现该接口的类然后new这个类。

    函数式接口

    如果一个接口只定义了一个接口方法,那么该接口称为函数式接口。

    实际上类中的方法本质是一个函数,只实现一个方法的类使用起来就好像在使用这个函数。

    函数式接口可以用@FunctionalInterface注解标注,编译器会帮你检测是否为一个函数式接口。

    实现一个函数式接口的匿名内部类可以简写为Lambda表达式。

    因为只实现一个方法,那么只要定义好了这个方法就等于定义好了这个匿名内部类。

    那么对于这个方法的实现就可以抽出来,于是有了Lambda表达式。

    Lambda表达式仍然是语法糖,Java后台根据表达式的定义创建了一个匿名内部类并实例化。

    Lambda表达式只需要定义逻辑,甚至不需要声明入参类型,因为这些都可以从接口中推断出来。

    函数式编程风格

    函数式编程是说函数是第一公民,函数作为变量,可以接收函数,也可以返回函数。

    Java没有函数,只能传入对象,所以使用匿名内部类来实现函数式编程的风格。

    历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式。

    看一个例子

    定义一个函数式接口

    public interface Food {

    String getFood(String name);

    }

    有一个方法要传入实现该接口的对象

    public class Demo4 {

    // eat方法要传入Food对象

    public static void eat(Food f) {

    String food = f.getFood("ham");

    System.out.println("eating " + food);

    }

    // 匿名内部类

    public static void main(String[] args) {

    Demo4.eat(new Food() {

    @Override

    public String getFood(String name) {

    return name;

    }

    });

    // Lambda表达式

    Demo4.eat(name -> {

    return name;

    });

    // 如果只有return xxx 一行代码,则可以简写

    Demo4.eat(name -> name);

    }

    展开全文
  • 匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写但使用匿名内部类还有个...3、匿名内部类中不能存在任何的静态成员变量静态方法。4、匿名内部类为局部内...

    匿名内部类也就是没有名字的内部类

    正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

    但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

    注意事项:

    1、使用匿名内部类时,我们必须是继承一个类或者实现一个接口,但是两者不可兼得,同时也只能继承一个类或者实现一个接口。

    2、匿名内部类中是不能定义构造函数的。

    3、匿名内部类中不能存在任何的静态成员变量和静态方法。

    4、匿名内部类为局部内部类,所以局部内部类的所有限制同样对匿名内部类生效。

    5、匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法。

    实例1:不使用匿名内部类来实现抽象方法

    abstract class Person {

    public abstract void eat();

    }

    class Child extends Person {

    public void eat() {

    System.out.println("eat something");

    }

    }

    public class Demo {

    public static void main(String[] args) {

    Person p = new Child();

    p.eat();

    }

    }

    运行结果:eat something

    可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用

    但是,如果此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?

    这个时候就引入了匿名内部类

    实例2:匿名内部类的基本实现

    abstract class Person {

    public abstract void eat();

    }

    public class Demo {

    public static void main(String[] args) {

    Person p = new Person() {

    public void eat() {

    System.out.println("eat something");

    }

    };

    p.eat();

    }

    }

    运行结果:eat something

    可以看到,我们直接将抽象类Person中的方法在大括号中实现了

    这样便可以省略一个类的书写

    并且,匿名内部类还能用于接口上

    实例3:在接口上使用匿名内部类

    interface Person {

    public void eat();

    }

    public class Demo {

    public static void main(String[] args) {

    Person p = new Person() {

    public void eat() {

    System.out.println("eat something");

    }

    };

    p.eat();

    }

    }

    运行结果:eat something

    由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现

    最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口

    实例4:Thread类的匿名内部类实现

    public class Demo {

    public static void main(String[] args) {

    Thread t = new Thread() {

    public void run() {

    for (int i = 1; i <= 5; i++) {

    System.out.print(i + " ");

    }

    }

    };

    t.start();

    }

    }

    运行结果:1 2 3 4 5

    实例5:Runnable接口的匿名内部类实现

    public class Demo {

    public static void main(String[] args) {

    Runnable r = new Runnable() {

    public void run() {

    for (int i = 1; i <= 5; i++) {

    System.out.print(i + " ");

    }

    }

    };

    Thread t = new Thread(r);

    t.start();

    }

    }

    展开全文
  • Java内部类和匿名内部类的用法

    万次阅读 多人点赞 2016-07-21 15:46:41
    Java内部类和匿名内部类的用法 【尊重原创,转载请注明出处】http://blog.csdn.net/guyuealian/article/details/51981163一、内部类: (1)内部类的同名方法 内部类可以调用外部类的方法,如果内部类有同名方法...
  • Java内部类分为4个部分进行阐述,分别为概览、成员内部类、局部内部类和匿名内部类。在本文中是Java内部类的匿名内部类,主要讲述匿名内部类的概念、匿名内部类的好处、匿名内部类的使用前提、和匿名内部类的应用...
  • 一、内部类:(1)内部类的同名方法内部类可以调用外部类的方法,如果内部类有同名方法必须使用"OuterClass.this.MethodName()"格式调用(其中OuterClass与MethodName换成实际外部类名及其方法;this为关键字,表示对...
  • java匿名内部类什么是匿名内部类匿名内部类的使用场景?匿名内部类如何创建?匿名内部类的实现使用例1(实现接口)例2(继承类) 什么是匿名内部类匿名内部类,顾名思义,就是不知道这个类到底是什么名字,也...
  • 匿名内部类有时候我们需要临时创建一个类和对象并且这个类无需在其他地方复用,就可以使用匿名内部类匿名内部类的好处是不需要单独开一个类文件来编写,也不需要类名称,临时使用很方便。但是匿名内部类没有名字也...
  • 一、内部类内部类特征:内部类当中可以调用外部类当中的属性方法,而外部类却不能调用内部类当中的。public class A {private int x = 10;public static void main(String[] args) {A.B b = new A().new B();b.say...
  • java的内部类可以玩出好多花样。介绍都挺多,我就不废话了。专门记一下困惑了我好半天的匿名内部类。总结一下:1.匿名内部类通常是为了...匿名内部类不能定义静态变量、方法类4.匿名内部类通常为了实现某个接口或...
  • 匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。...要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可...
  • JAVA 内部类和匿名类

    2020-10-31 12:26:50
    Java内部类和匿名内部类的用法,该篇博客对JAVA内部类和匿名类的讲解更加详细。 内部类的访问规则: 1、内部类可以直接访问外部类中的成员,包括私有。之所以可以直接访问外部类中的成员,是因为内部类中持有了一个...
  • 匿名内部类长什么样子的?为什么能这么用?...下面四个方面来阐述下:1、定义匿名内部类2、匿名内部类的语法3、访问作用域的局部变量、定义访问匿名内部类成员4、匿名内部类实例一、定义匿名内...
  • Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类...
  • Java匿名类(匿名内部类) 学习的参考博文:无恨之都 1. 初识 匿名类 标准说法: 内部类包括:成员类、局部类、匿名类(匿名内部类)。 匿名类概念: 匿名类可以使你的代码更加简洁 (JDK8之后Lambda更简洁)。 你可以...
  • 一、JAVA中内部类和匿名内部类的区别内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用。匿名内部类:它只能使用一次...
  • 内部类: 定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也...
  • 主要介绍了Java内部类和匿名内部类的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 分四种:成员内部类、局部内部类、静态内部类和匿名内部类。 1、成员内部类: 即作为外部类的一个成员存在,与外部类的属性、方法并列。 注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。 public ...
  • 匿名内部类:没有类名的类就称作为匿名内部类匿名内部类的好处:简化书写。 匿名内部类的使用前提:必须存在继承或者实现关系才能使用。 匿名内部类一般是用于实参。 abstract class Animal02{ public abstract...
  • 16.这是java的关于java生成使用匿名内部类的源代码可以直接进行编译运行,希望大家能够从中获益良多(下面每一个package都是一个独立的java类文件,需要单独复制存放)。package niming;//这是一个接口类——...
  • // 成员变量定义在中,整个都可以被访问。void run(){System.out.println(color+".."+num);}}classCarDemo{public static void main(String[] args){Car c = new Car();//建立一个c的类型变量,当...
  • Java内部类和匿名类

    2021-03-24 10:56:07
    Ø 匿名内部类 内部类的访问特点: 1、内部类可以直接访问外部类的成员,包括私有。 2、外部类要访问内部类的成员,必须创建对象。 成员内部类 Ø 局部内部类如何使用内部类创建对象? 直接在成员方法内部位置创建该...
  • java内部类之成员内部类、局部内部类和匿名内部类 小青蛙哎呀2018-07-15 16:13:303591已收藏55 分类专栏:javajava基础入门文章标签:内部类成员内部类局部内部类匿名内部类java 版权 内部类概念 一个类中...
  • Java内部类和匿名内部类的用法 为了加深印象,动手实现了四种内部类的代码。 成员内部类: package innerclass; /**内部类之一:成员内部类的实现 相当于非静态方法 * * */ public class MemberInner { ...
  • 内部类的定义是:定义在另一个类内部的类。存在它的原因是:1.一个内部类的对象能够访问创建它的对象的实现,包括私有...3.匿名内部类可以很方便的定义回调。4.使用内部类可以非常方便的编写事件驱动程序。其实它真...
  • Java内部类即为在类里再定义一个类,成为类的子类,而这个类可以定义为public,privatestatic类型,如果定义为public,可以再其他类调用这个内部类,而private类型的内部类只能自己使用,但是不论是public还是...
  • 匿名内部类有时候我们需要临时创建一个类和对象并且这个类无需在其他地方复用,就可以使用匿名内部类匿名内部类的好处是不需要单独开一个类文件来编写,也不需要类名称,临时使用很方便。但是匿名内部类没有名字也...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,225
精华内容 2,090
关键字:

java匿名类和匿名内部类

java 订阅