匿名类和匿名对象

https://blog.csdn.net/qq_39728125/article/details/77119736

匿名类和匿名对象

2017年08月12日 16:19:40 qq_39728125 阅读数:628更多

个人分类: java基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39728125/article/details/77119736

匿名类和匿名对象



在Java中有匿名类和匿名对象的概念,有名字可知他们是因为没有名字二指定为匿名类的。

匿名类

匿名类(也叫匿名内部类)他是内部类的一种。匿名类在类中只能使用一次,它通常用来简化代码的编写,但使用匿名类还有一个前提条件:它必须继承一个父类或者一个接口,因此这个匿名类会被默认为这个父类或者接口的子类或实现类。如:

//这是一个简单的接口
public interface IPresenter {
    void run();
}

//这是另外一个类
public class Presenter {
    //使用了接口的对象作为方法的参数,然后返回接口的对象
    public IPresenter getiPresenter(IPresenter iPresenter) {
        return iPresenter;
    }
}

//Convey类来操作上面的类和接口
public class Convey {
    //定义Presenter对象
    private Presenter presenter = new Presenter();

    public void setiPresenter() {
        //一个接口的局部变量
        IPresenter iPresenter = presenter.getiPresenter(new IPresenter() {
        //在这里定义一个接口的实现匿名类

            @Override
            public void run() {
                // 实现接口的方法
            }
        });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

在Java中这种匿名类很常见,例如:

new Button().setOnClickListener(new OnClickListener() { 

    //定义了一个实现事件监听的匿名类
    @Override
    public void onClick(View v) { //实现OnClickListener中的方法

        new Thread() {
            //定义了一个实现Thread的匿名类
            @Override
            public void run() {  }
        }.start();
    }
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

匿名对象

匿名对象也是Java中比较常见的实例化对象方式,匿名对象的使用情况:

  • 当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
  • 可以将匿名对象作为实际参数进行传递。
    public class Convey {
    
        private Presenter presenter;
    
        public void setiPresenter() {
            IPresenter iPresenter = presenter.getiPresenter(new IPresenter() {
                @Override
                public void run() {
                    // TODO Auto-generated method stub
                }
            });
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            //用匿名对象直接该类的方法
            new Convey().setiPresenter();
        }
    

原文地址:https://www.cnblogs.com/guyuehuanhuan/p/10046852.html

时间: 2024-10-12 08:36:30

匿名类和匿名对象的相关文章

java匿名类和匿名对象及this的其他用法

/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, 而且可以增加自己的方法) }//相当于将 继承父类 和 new 的过程 写到了一起有某有!很方便有某有! */ class Outer{ int num; public Outer(){ num = 5; } class Inner{ int num; public Inner(){ num = 1

.NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法

开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以,跟着本篇的步伐,继续来围观. /* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 6.扩展方法 7.系统内置委托 Func / Acti

2.匿名类,匿名类对象,private/protected/public关键字、abstract抽象类,抽象方法、final关键字的使用,多线程Thread类start方法原理

package com.bawei.multithread; //注意:模板方法我们通常使用抽象类或者抽象方法!这里我们为了方便在本类中使用就没有使用抽象类/抽象方法 public class TemplateThread { //如果这个方法不想被子类或者别人随意改动[这样子类就不能覆写该方法了],这里方法就要设置为final方法 public final void println(String message){ System.out.println("###################

匿名类、匿名方法、扩展方法

/* 新语法索引 */ 1.自动属性 Auto-Implemented Properties 2.隐式类型 var 3.参数默认值 和 命名参数 4.对象初始化器 与 集合初始化器 { } 5.匿名类 & 匿名方法 6.扩展方法 7.系统内置委托 Func / Action 8.Lambda表达式 9.标准查询运算符 Standard Query Operator 10.LINQ查询表达式 一.匿名类 1.1 不好意思,我匿了 在开发中,我们有时会像下面的代码一样声明一个匿名类:可以看出,在匿名

JAVA学习--匿名类的使用

1 public class TestProduct { 2 public static void main(String[] args) { 3 TestProduct t = new TestProduct(); 4 //方式一:创建一个实现Product接口的类的对象,并将此对象传入方法中 5 NoteBook n = new NoteBook(); 6 t.show(n); 7 //方式二:创建一个实现Product接口的匿名类的对象 8 Product p = new Product(

Java通过匿名类来实现回调函数

在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2()\n"); } void f3() { printf("f3()\n"); } void do_func(void(*f)()) { f(); } int main() { do_func(f1); do_func(f2); do_func(f3); } 在C++11中,实现回调

由浅入深掌握匿名类

先上一段简单的代码: <?php $name = new class(){ public function __construct() { $this->age = 18; } }; echo $name->age; 匿名类的声明和实例化是同时进行的,它具备其他类所具备的所有功能,差别在于它没有类名. 匿名类的一次性小任务代码流程对性能提升帮助很大. 虽然我们看到的匿名类是没有命名的,但在PHP内部,会在内存的引用地址表中为其分配一个全局唯一的名称,使用get_class()函数即可查看

Effective Java 第三版——42.lambda表达式优于匿名类

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 42.lambda表达式优于匿名类 在Java 8中,添加了函数式接口,lambda表达式和方法引用,以便更容易地创建函数对象. Stream API随着其他语言的修改一同

Java学习-匿名类

1.筛选出符合条件的Hero:要求hp>100 && damage<50 匿名类实现: 先定义接口HeroChecker,其中的test()方法实现了Hero的筛选 1 package generic; 2 3 import charactor.Hero; 4 5 public interface HeroChecker { 6 public boolean test(Hero h); 7 } 1 package generic; 2 3 import java.util.Ar