`
linsea
  • 浏览: 87523 次
  • 性别: 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中 利用匿名内部类进行较简洁的双括弧初始化的方法

    本篇文章小编将为大家介绍,关于在java中 利用匿名内部类进行较简洁的双括弧初始化的方法,有需要的朋友可以参考一下

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

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

    【05-面向对象(下)】

    提供带参数的构造器,用于根据传入参数来初始化类里的属性  –3.仅为该类的属性提供getter方法,不要为该类的属性提供setter方法,因为普通方法无法修改final修饰的 属性  –4.如有必要,重写Object类中...

    Java语言面向对象上册教程

    1. 面向过程编程 2 2. 面向对象编程 4 ...15. 内部类/匿名内部类 135 16. 接口 144 16.1 为什么使用接口 144 16.2 接口的体验 148 16.3 接口语法 150 16.4 接口作为一种标准理解 151 16.5 面向接口编程 154

    Kotlin中的对象表达式和对象声明的具体使用

    Kotlin的对象表达式与Java中的匿名内部类的主要区别:匿名内部类只能指定一个父类型,但对象表达式可以指定0~N个肤类型。 一、对象表达式 对象表达式的语法格式如下: object [: 0~N个父类型]{ //对象表达式的类...

    C++思维导图Xmind文件和.png文件(持续更新)

    初始化列表、匿名对象、static成员、类的隐式类型转换和explicit关键字、内部类思维导图xmind文件和.png文件 内存管理(new/delete使用详解) 模板——初识 STL——string类 STL——vector STL适配器——stack && ...

    java8集合源码-Java8:java8实践

    一个变量或参数的值在它初始化后永远不会改变是有效的 final。 匿名内部类与 Lambda 不同 匿名内部类中的“this”指的是匿名内部类对象的 this,而在 lambda 中它指的是外部类 this。 lambda 中没有“this”。 Java ...

    JAVA实验报告

    (三)建立独立运行的窗口界面并使用匿名类 36 (四)使用 Swing 组件 39 (五)使用自定义对话框与内部类 41 实验6 图形处理 44 一、实验目的 44 二、实验要求 44 三、实验内容 44 (一)使用图形类 Graphics 44 ...

    javaSE代码实例

    15.4.3 匿名内部类的初始化 337 15.4.4 匿名内部类作用的体现 337 15.5 理解内部类 339 15.6 内部接口 340 15.6.1 定义在类中的内部接口 340 15.6.2 定义在接口中的内部接口 341 15.7 小结 342 第16...

    疯狂JAVA讲义

    6.7.5 匿名内部类 212 6.7.6 闭包(Closure)和回调 215 6.8 枚举类 217 6.8.1 手动实现枚举类 217 6.8.2 枚举类入门 219 6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象...

    21天学通Java-由浅入深

    245 12.3.3 在外部类外访问静态内部类 246 12.4 匿名内部类 247 12.4.1 创建匿名内部类 247 12.4.2 匿名内部类的初始化 249 12.5 综合练习 250 12.6 小结 250 12.7 习题 250 第13章 多线程(精彩视频:55分钟) 252 ...

    zadaciZaSamostalanRad24.12.14.II

    练习事件处理 创建一个绘制圆并允许您在自由空间中移动圆的程序。 以多种方式编写相同的程序: 这样每个事件处理程序都写在一个单独的... 所以主类具有使用匿名类初始化的事件处理程序的静态字段。 祝你好运,埃米尔

    corejava培训文档

    匿名内部类 7.12. 集合 7.12.1. 集合接口类层次 7.12.2. 集合类层次 7.12.3. 五个最常用的集合类之间的区别和联系 7.12.4. 比较 7.13. 反射 8. 七 异常 8.1. 异常的基本概念 8.2. 捕获异常 8.3. ...

    Java经典编程源码基础例程300.zip

    实例068 匿名内部类的简单应用 104 实例069 静态内部类的简单应用 105 实例070 实例化Class类的几种方式 107 实例071 查看类的声明 108 实例072 查看类的成员 110 实例073 查看内部类信息 112 实例074 动态设置类的...

    w08ZadacaEventHandling

    w08ZadacaEventHandling 埃米尔: 几种方式练习事件处理(一个我们可以移动的圆圈) 这样每个事件处理程序都写在一个单独的类中 :multiply: ... 所以主类具有使用匿名类初始化的事件处理程序的静态字段。 :multiply:

    java初学者必看

    10.5 匿名内部类 10.5.1 继承式 10.5.2 接口式 10.5.3 参数式 10.6 静态嵌套类 10.7 内部类的继承 10.8 本章习题 第11章 线程 11.1 线程基础 11.1.1 什么是线程 11.1.2 Thread创建线程 11.1.3 Thread创建...

    Java面试32个经典问题 .doc

    第一, 谈谈final, finally, finalize的区别。 (最常被问到) final修饰符(关键字) ...第二,Anonymous Inner Class(匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

    java编程练习题

    数组章节作业 1、将一个数组中的元素倒排过来,不能新开一个数组的临时存储空 间,只能在原数组上改。 2、写一个类用来模拟栈这种数据结构,要求底层 ...1. 使用匿名内部类实现 2. 使用静态内部类实现

    Java2核心技术.part5

    6.4.5匿名内部类 6.4.6静态内部类 6.5代理 第7章图形程序设计 7.1 Swing概述 7.2创建框架 7.3框架定位 7.4在面板中显示信息 7.5 2D图形 7.6颜色 7.7为文本设定特殊字体 7.8图像 第8章事件...

Global site tag (gtag.js) - Google Analytics