黑马程序员--Java编程之匿名内部类
2015-12-06 00:23
274 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
可以形象的将外部类比喻成人的身体,而内部类就是身体中的器官,比如心脏等
外部类要访问内部类,必须建立内部类对象。
内部类定义在局部位置上时也可以直接访问外部类中的成员,同时也可以访问所在局部中的局部变量,但该变量必须是被final修饰的。
通过以上举例可以看出,我们只想调用一次Student类中的方法,以后便不再使用,却单独创建了一个子类,这样是不是很麻烦,为了优化代码,节省资源,我们可以使用匿名内部类解决改问题
由上例我们可以看出匿名内部类的加入使得我们少书写了一个Student类的子类,直接在大括号中调用了抽象类的抽象方法
匿名内部类不仅可以使用于抽象类,也可以使用在接口上
解析:
1 内部类
1.1 定义
将一个类定义在另一个类里面,里面的类便成为内部类可以形象的将外部类比喻成人的身体,而内部类就是身体中的器官,比如心脏等
1.2 访问特点
内部类可以直接访问外部类的成员,也包括私有成员;外部类要访问内部类,必须建立内部类对象。
1.3 内部类位置
内部类定义在成员位置上时可以被private,static修饰符修饰,但被static修饰的内部类只能访问外部类中的静态成员;内部类定义在局部位置上时也可以直接访问外部类中的成员,同时也可以访问所在局部中的局部变量,但该变量必须是被final修饰的。
2 匿名内部类
2.1 定义
没有名字的类,其实就是内部类的简化写法,所以它也有内部类的特点,因为匿名内部类没有名字,所以只能使用一次,主要用来简化代码时使用。2.2 前提
存在一个类或者接口;该类可以是具体类也可以是抽象类。2.3 格式
new 类名或者接口名(){ 重写方法; };
2.4 举例
2.4.1 例1
使用继承来实现抽象方法://写一个Student类 abstract class Student{ void study(){}; } //写一个子类继承Student类 class StudentA extends Student{ //重写父类方法 public void study(){ System.out.println("学习Java"); } } public class Demo{ public static void main(String[] args){ Student stu = new StudentA(); stu.study();//运行结果:学习Java } }
通过以上举例可以看出,我们只想调用一次Student类中的方法,以后便不再使用,却单独创建了一个子类,这样是不是很麻烦,为了优化代码,节省资源,我们可以使用匿名内部类解决改问题
2.4.2 例2
使用匿名内部类实现抽象方法//写一个Student类 abstract class Student{ void study(){}; } public class Demo{ public static void main(String[] args){ //使用匿名内部类调用抽象方法 Student stu = new Student(){ public void study(){ System.out.println("学习Java"); } }; stu.study();//运行结果:学习Java } }
由上例我们可以看出匿名内部类的加入使得我们少书写了一个Student类的子类,直接在大括号中调用了抽象类的抽象方法
匿名内部类不仅可以使用于抽象类,也可以使用在接口上
2.5 经典面试题
题目要求:根据下面代码,补充缺少的代码,使完整的代码可以在控制台输出“HelloWorld”Interface Inter{ void show(); } class Outer{ //补齐代码 } public class Demo{ public static void main(String[] args){ Outer.method().show(); } }
解析:
Interface Inter{ void show(); } class Outer{ //代码实现 public static Inter method(){ return new Inter(){ public void show(){ System.out.println("HelloWorld"); } }; } } public class Demo{ public static void main(String[] args){ Outer.method().show(); /* 1.由Outer.method()语句可以看出Outer类可以直接调方法, 说明该类中存在静态方法method(); 2.由Outer.method().show();语句可以看出,method方法还可 以调方法show(),说明method()方法存在返回值,并且该返回 值是一个对象 3.method()调用的是show()方法,说明其返回值是一个Inter对 象,因为只有Inter接口中才有show()方法 */ } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统