`
linsea
  • 浏览: 90475 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

匿名内部类的初始化

    博客分类:
  • Java
 
阅读更多
package codelib.innerclasses;

public interface Destination {
	String readLabel();
}

 

 

package codelib.innerclasses;
/**
 * @author Administrator
 *
 */
public class InnerClassInitTest {

	public Destination destination(  final String dest, final float price){
		return new Destination() {
			private int cost;
			private String label = dest;
			{//实例初始化代码块,相当于构造器的实际效果
				cost = Math.round(price);
				if (cost > 100)
					System.out.println("Over budget!");
			}
			public String readLabel() {
				return label;
			}
		};
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		InnerClassInitTest p = new InnerClassInitTest();
		Destination d = p.destination ("Tasmania",101.34F);

	}

}

 

 

    如果匿名内部类希望使用一个在其外部定义的对象(调用父类构造器时,传入的参数除外),那么编译器要求其参数引用是final的.    

 

构造器是与类名同名的函数,而匿名类因为没有名字,所以也就没有构造器,为了达到与构造器实例化对象的效果,可以使用代码块来进行实例初始化操作.如上例中的花括号中的代码.

 

    匿名内部类与正规的继承相比有些受限,因为匿名内部类既可以扩展类,也可以实现接口,但是不能两者兼备.而且如果是实现接口,也只能实现一个接口.

分享到:
评论
1 楼 zuowoziji123 2013-09-24  
跟thinking in java里写的一模一样  晕

相关推荐

    java 匿名内部类的使用规范

    它可以直接继承一个类或实现一个接口,并且可以在声明的同时初始化。 1. **创建匿名内部类** - **作为局部变量**:在方法或代码块内声明,可以用来实现接口或者继承类。 ```java Button button = new Button() {...

    Java4Android 35_内部类和匿名内部类

    - 匿名内部类不能有构造器,但可以通过初始化块来传递参数。 学习“Java4Android 35_内部类和匿名内部类”这个教程,开发者将掌握如何有效地利用内部类和匿名内部类,提升代码的结构和功能,特别是在Android应用...

    java初级视频教程系列之-java初始化

    8. **匿名内部类初始化**:在Java中,可以创建没有名字的内部类,它们通常用在需要一次性创建的场合,如事件处理器。初始化匿名内部类时,需要立即创建其实例。 9. **集合初始化**:Java提供了ArrayList, ...

    在java中 利用匿名内部类进行较简洁的双括弧初始化的方法

    这种特性使得匿名内部类在某些特定情况下,比如初始化集合框架如Set、Map、List时,能提供更加简洁的代码。本文将深入探讨如何在Java中利用匿名内部类进行双括弧初始化的方法。 首先,让我们理解什么是匿名内部类。...

    匿名内部类_Anoymous_Inner_

    7. **构造器调用**:当内部类被继承时,由于内部类拥有对外部类的引用,所以在子类的构造器中必须显式调用`super()`来初始化这个引用。在代码示例中,`AnoClass`继承了`Outer.Inner`,并通过`wi.super();`调用了外部...

    内部类的相关知识-静态内部类,匿名内部类……

    匿名内部类可以在定义时直接初始化,省略了类的定义部分。 示例代码如下: ```java public class AnonymousInnerClass { public static void main(String[] args) { Runnable runnable = new Runnable() { @...

    关于匿名内部类的资料

    在匿名内部类中定义成员变量时,可以在声明时进行初始化,就像在常规类中一样。例如: ```java public class Parcel8 { public Destination dest(final String dest) { return new Destination() { private ...

    非常精简的匿名内部类详解.docx

    在Java编程语言中,匿名内部类是一种特殊的类,它没有名称,通常用于简洁地实现某个接口或继承某个类,尤其在只需要单个实例且无需多次复用的情况下。这种设计模式可以大大简化代码,提高可读性。下面我们将深入探讨...

    Java特别篇-匿名对象与匿名内部类

    ### Java特别篇-匿名对象与匿名内部类 #### 一、匿名对象 在Java中,对象通常通过定义一个变量来引用。例如,在`Student`类的例子中,我们首先定义了一个`Student`类,并且在`Test`类的`main`方法中通过以下方式...

    JAVA_匿名内部类

    匿名内部类可以直接在类、方法或初始化块中定义,不需要单独的文件。创建匿名内部类时,我们只需在其后跟一个对象实例化,如 `new InterfaceName() { /* 实现接口的方法 */ }` 或 `new SuperClassName() { /* 重写...

    【IT十八掌徐培成】Java基础第06天-04.匿名内部类1.zip

    Java编程语言中的匿名内部类是Java面向对象特性的一个重要组成部分,它允许我们在不定义一个完整的新类的情况下,创建类的实例。在徐培成老师的"Java基础第06天-04.匿名内部类1"课程中,我们将深入探讨这个主题。 ...

    使用内部和匿名类优化Java代码

    2. 非静态内部类不能声明静态初始化块和静态成员,除非它们是常量。 3. 如果内部类是在方法内定义的,它不能访问该方法的局部变量和参数,除非这些变量被声明为final。 匿名类是无名的类,通常用于快速创建一个只...

    局部内部类和匿名内部类使用局部变量为什么要final1

    局部内部类和匿名内部类是Java中的一种特性,它们允许我们在方法内部定义类。然而,一个重要的限制是,这些内部类只能访问在其作用域内的final或者实际上等效于final的局部变量。这是因为内部类可能在外部方法结束后...

    Java匿名内部类原理与用法详解

    System.out.println("匿名内部类的初始化块..."); } // 实现抽象方法 public double getPrice() { return 56.2; } }; ai.test(d); } } ``` 在上面的代码中,我们使用匿名内部类来创建了某个Device对象,并...

    Java提高篇之详解匿名内部类

    在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类、匿名内部类使用的形参为何要为final。  一、使用匿名内部类内部类  匿名内部类由于没有名字,所以它的创建方式有...

    6种方法初始化JAVA中的list集合

    利用匿名内部类可以一次性初始化List,这种方式在代码中看起来比较简洁。 ```java List<String> names = new ArrayList() {{ add("Tom"); add("Sally"); add("John"); }}; System.out.println(names); ``` 5. ...

    java内部类的讲解

    3. **本地内部类(Local Inner Classes)**:这些内部类是在方法体或初始化块中定义的。它们可以访问该方法中的局部变量,但这些变量必须是final的。本地内部类的作用域仅限于定义它的方法或块。 4. **匿名内部类...

    简单谈谈java中匿名内部类构造函数

    4. `l4` 展示了可以在匿名内部类中包含多个初始化块,这在某些场景下可能会有用。 5. `l5` 创建了一个匿名内部类,它在调用父类的构造函数(这里传入了参数5)后执行自己的初始化块。这表明匿名内部类虽然没有显式的...

    第11章 内部类(Inner class).ppt

    - 局部内部类是在方法、构造器或初始化块内部定义的类。它们的作用域仅限于该方法或代码块,因此具有更高的封装性。 3. **匿名内部类**: - 匿名内部类没有名称,通常用于快速创建一次性使用的简单类,常用于实现...

Global site tag (gtag.js) - Google Analytics