黑马程序员_匿名内部类

原创 2013年12月02日 14:02:07
------- android培训java培训、期待与您交流! ----------
匿名内部类:

1,匿名内部类其实就是内部类的简写格式

2,定义匿名内部类的前提:内部类必须继承一个类或者实现一个接口

3,匿名内部类的格式:  new 父类或接口(参数) { 定义子类内容 };

4,其实匿名内部类就是一个带内容的匿名子类对象

5,使用匿名内部类的常见情况:调用的方法的参数类型是一个接口类型的对象,而且接口中只有1~2个方法

awt中经常使用到匿名内部类:
Frame类有一个方法:addWindowListener(WindowListener l) 
而其中WindowListener是一个接口,使用该接口需重写7个抽象方法,于是当我们只需要用到监听器中1~2个事件时,可以继承WindowAdapter类,该抽象类实现了WindowListener接口,重写了所有方法,且所有方法都为空,都不为抽象方法。因此有以下代码:
Frame f  = new Frame("窗口标题")

class MyWinLis extends WindowAdapter {
	public void windowClosing(WindowEvent e) {  
		System.exit(0);
	}
}
	
f.addWindowListener(new MyWinLis());
用匿名内部类简化书写后如下:
Frame f = new Frame("窗口标题");
		
f.addWindowListener(new WindowAdapter(){
	public void windowClosing(WindowEvent e) {  
		System.exit(0);
	}
});
		

练习:
interface Inter {
	void method();
}
	
class Test {
	//使用匿名内部类补足代码
}
	
class InterClassTest {
	
	public static void main(String[] args) {
		Test.function().method();
	}
}
解题过程:
1,从 Test.function() 可以看出:调用function()不需要创建对象,所以function()是Test类中的一个静态方法。
2,从 .method() 可以看出:function()返回一个Inter类型的对象,才能调用method()。
3,不使用匿名内部类的代码如下:
static Inter function() {
	return new Inter();
}
//定义Inner类实现Inter接口,复写method方法
class Inner implements Inter {
	public void method() {
		//method
	}
}
4,使用匿名内部类后可以简写为:
static Inter function() {
	return new Inter() {
		public void method() {
			//method
		}
	};
}

常见面试题:

没有父类没有接口如何写匿名内部类?

所有类都是Object的子类,因此可以使用匿名内部类。
new Object() { 
//定义内容
};
 

匿名对象和内部类

匿名对象: 匿名对象是对象的简化形式; 匿名对象的使用情况: 1)当对对象方法仅进行一次调用的时候使用;如果需要调用多次,还需要创建对象。如果对一个对象进行多个成员的调用,就必须给这个对象起个名...
  • chenrushui
  • chenrushui
  • 2016年07月15日 11:21
  • 1021

内部类和匿名内部类

本文参考毕向东java视频学习,作如下总结,方便日后学习参考。 一.内部类的概述 . 将一个类定义在另一个类的里面,对里面那个类就称为内部类(内置类、嵌套类) .访问特点: ...
  • u010248330
  • u010248330
  • 2016年08月23日 16:37
  • 607

成员内部类.局部内部类.静态内部类.匿名内部类的区别

一 对于非静态内部类,不能有静态成员,例如变量,方法等。静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量。非静态内部类的非静态成员可以访问外部类的非静态变量。 成员内部类...
  • dipang00
  • dipang00
  • 2016年10月17日 11:51
  • 754

匿名内部类中this的使用问题

大多数情况下,我在对Android的事件处理方式都是用的基于监听的事件处理方式。在这当中,一般都会涉及到事件监听器这样一个类。大部分的时候,事件监听器都没有什么复用价值,因此大部分的事件监听器只是临时...
  • u010670619
  • u010670619
  • 2015年07月31日 20:06
  • 1880

匿名内部类详细介绍

在网上找到一篇不错的讲解匿名内部类的文章,收藏、分享一下。 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有...
  • xyz_1991
  • xyz_1991
  • 2016年09月07日 12:07
  • 330

Android里面的匿名类与匿名内部类使用

在android开发中经常碰到匿名类(和匿名内部类)的使用,那么匿名类和一般情况下使用的类有什么不同, 从实现的功能来讲是一样的,但是使用匿名更加简洁方便,形式上有点像new一个接口或类的感觉,但是...
  • eric4784510
  • eric4784510
  • 2016年06月19日 15:57
  • 2780

使用匿名内部类的构造函数

建议39: 使用匿名类的构造函数 阅读如下代码,看看是否可以编译: public static void main(String[] args) {       List l1 = new Arr...
  • brockliu1010
  • brockliu1010
  • 2013年10月08日 16:33
  • 3904

java提高篇(九)-----详解匿名内部类

在java提高篇-----详解内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客。在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始...
  • chenssy
  • chenssy
  • 2013年10月27日 15:05
  • 49559

黑马程序员—内部类、匿名内部类

内部类 定义:将一个类定义在另一个类的里面,对里面那个 类就称为内部类(内置类,嵌套类)。 访问特点: 1、内部类可以直接访问外部类中的成员,包括私有成 员。  • 而外部类要...
  • wanghed
  • wanghed
  • 2014年05月28日 18:30
  • 263

黑马程序员——内部类、匿名内部类

一、常见内部类 class { public static void main(String[] args) { System.out.println("Hello World!"); ...
  • u013784889
  • u013784889
  • 2014年03月06日 19:48
  • 408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:黑马程序员_匿名内部类
举报原因:
原因补充:

(最多只允许输入30个字)