JAVA-匿名内部类

匿名内部类

1.定义:

  实现一个接口,或者继承一个父类,并返回new好的实例。

2. 语法:

   new 类名或者接口名 类的实现体

3.什么情况下使用匿名内部类:

  类在创建后马上被使用,且只使用一次

4.注意点:

  ·匿名内部类不能有构造方法

  ·匿名内部类不能定义任何静态成员、静态方法。

  ·匿名内部类不能是public,protected,private,static。

  ·只能创建匿名内部类的一个实例。

  ·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

5.举栗子

   通过继承的方式实现匿名内部类:

 1 package com.han6.java;
 2
 3 public class Fruit
 4 {
 5     public void saySomething()
 6     {
 7         System.out.println("I am Fruit!");
 8     }
 9
10     public static void main(String[] args)
11     {
12         Fruit fruit = new Fruit()
13         {
14             @Override
15             public void saySomething() {
16                 System.out.println("I am Apple!");
17             }
18
19         };
20         fruit.saySomething();
21     }
22
23 }

  通过实现接口的方式来使用匿名内部类:

 1 package com.han6.java;
 2
 3 public class Demo
 4 {
 5     public static void main(String[] args)
 6     {
 7         Person person  = new Person()
 8         {
 9             @Override
10             public void eat()
11             {
12                 System.out.println("a person like to eat fruit!");
13             }
14         };
15         person.eat();
16     }
17
18 }
19
20 interface Person
21 {
22     void eat();
23 }

6.工作使用:

  匿名内部类是用在具体的某个实例上的=修改了这个实例所属类的某些属性方法,所修改的内容也只对这个实例有效相当于一个一次性的类。主要用在某个特殊事件的处理上。

时间: 2024-10-23 22:39:24

JAVA-匿名内部类的相关文章

为什么说Java匿名内部类是残缺的闭包

前言 我们先来看一道很简单的小题: public class AnonymousDemo1 { public static void main(String args[]) { new AnonymousDemo1().play(); } private void play() { Dog dog = new Dog(); Runnable runnable = new Runnable() { public void run() { while(dog.getAge()<100) { // 过

java 匿名内部类 js 闭包

最近在看js,看到closure(闭包)这一块儿的时候就想到了 java的匿名内部类 两者都有涉及到变量/参数的引用问题. 先说java的匿名内部类,他的定义我就不多做说明了,可以参考地址 http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html .我们今天主要说: 1.Why cannot an anonymous class access local variables in its enclosing

#随笔之java匿名内部类

随笔之java匿名内部类 从今天起开始每日一篇技术博客,当然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,希望大家多多指教,一起进步! 在讲匿名内部类之前,先讲讲内部类的一些概念. 1.内部类:顾名思义,内部类就是写在一个类里面的类(废话),这里大家可能会问了,为什么我们不直接写一个class呢,非要写在内部.原因很简单,内部类一方面是有很好的封装性,要通过外部类对象才能访问(具体实例见下方代码).另一方便定义起来很方便.最后,内部类还可以骚气地实现多重继承,因为外部类是否继承或实

【Java学习笔记之二十六】深入理解Java匿名内部类

在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.如何初始化匿名内部类.匿名内部类使用的形参为何要为final. 一.使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 } 在这里我们看到使用匿名内部类我们必须要继承一个父类或者

Think in java读书笔记之:java匿名内部类的继承和覆盖

内部类的继承 Java中继承匿名内部类一个要结局的问题就是,内部类的构造器必须要指向其外围对象的引用,所以要采取特殊的语法.书上给的示例代码的可有编译版本,必须在继承的内部类的构造器内添加enclosingClassReference.super(). 1 class WithInner{ 2 class Inner{} 3 } 4 public class InheritInner extends WithInner.Inner{ 5 InheritInner(){ 6 enclosingCl

【50】java 匿名内部类剖析

匿名内部类介绍: 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 匿名内部类的声明格式如下: new ParentName(){ ...// 内部类的定义 } 匿名内部类的使用场景: .只用到类的一个实例 . ·类在定义后马上用到. ·类非常小(SUN推荐是在4行代码以下) ·给类命名并不会导致你的代码更容易被理解. 匿名内部类的使用原则: ·匿名内部类不能有构造方法. ·匿名内

Java 匿名内部类 &amp; 内部类

一.JAVA中内部类和匿名内部类的区别 内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用. 匿名内部类:它只能使用一次,不区分static和非static.如果用到外部类的变量的话,必须是类变量或者实例变量,就是必须是类定义的变量,或者final的局部变量.匿名内部类如果是继承某个类的话是可以重写那个类的方法的,这个和普通内部类一样.  总结:可以用匿名内部类的地方都可以用内部类替换,但是

为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰

大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { private int a; public class Inner { private int a; public void method(int a) { a++; //局部变量 this.a++; //Inner类成员变量 Outer.this.a++; //Outer类成员变量 } } } 一般做法是

从一次意外开始说java匿名内部类

java的内部类.匿名类本来以为自己用的已经很溜了, 结果, 就在昨天晚上12点来钟发生了重大事故.要说事故的严重性呢,那就是导致我一晚上没有睡着觉. 那下面先用一段模拟代码来描述下我出现的问题的: public class Test { public static void main(String[] args) throws InterruptedException { View v = new View(); v.show(1); Thread.sleep(500); v.mTextVie

JAVA匿名内部类(Anonymous Classes)

匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在完成了手头的开发任务后,查阅了一下JAVA官方文档,将匿名内部类的使用进行了一下总结,案例也摘自官方文档.感兴趣的可以查阅官方文档(https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html). 2.匿名内部类 匿名内部类