自学java 第十章内部类(二)
今天主要学习了匿名内部类。
匿名内部类是一种特殊的内部类,它没有类名,是通过继承一个类或实现一个接口来创建的,匿名内部类相当于基类的一个导出类,不过它只能通过向上转型为基类类型后才能被使用。
匿名内部类主要用于对继承方法进行实现或覆盖,它不需要添加其它的方法,即使添加也无法使用(因为它没有类名,只能通过向上转型使用,且无法向下转型,因此添加的其它方法也就无法访问)。
匿名内部类如果想使用外部定义的对象,则编译器要求参数引用必须是final类型,否则会报错。如:
public Destination destination(final String s){
return new Destination(){
private String item=s;
}
};
匿名内部类可以通过实例初始化来达到为匿名内部类创建一个构造器的效果。如:
DangerousMonster getMonster(){
return new DangerousMonster(){
{System.out.println("this is Inside instance initializer");}
@Override
public void menace() {
System.out.println("this is DangerousMonster.menace()");
}
@Override
public void destroy() {
System.out.println("this is DangerousMonster.destroy()");
}
};
使用匿名内部类来设计工厂方法会达到更好的效果:
package chapter_ten;
import java.util.Random;
public class Demo_seventeen {
static void playGame(GameFactory f){
Game g=f.getGame();
g.play();
}
public static void main(String[] args) {
playGame(ThrowCoin.factory);
playGame(ThrowDice.factory);
}
}
interface Game{
void play();
}
interface GameFactory{
Game getGame();
}
class ThrowCoin implements Game{ //抛硬币
private Random rand=new Random();
public void play() {
if(rand.nextInt(2)==1)
System.out.println("您此次抛的是正面");
else
System.out.println("您此次抛的是反面");
}
public static GameFactory factory=new GameFactory(){
@Override
public Game getGame(){
return new ThrowCoin();
}
};
}
class ThrowDice implements Game{ //掷骰子
private Random rand=new Random();
public void play(){
switch(rand.nextInt(6)+1){
case 1:
System.out.println("您掷的是1");
break;
case 2:
System.out.println("您掷的是2");
break;
case 3:
System.out.println("您掷的是3");
break;
case 4:
System.out.println("您掷的是4");
break;
case 5:
System.out.println("您掷的是5");
break;
case 6:
System.out.println("您掷的是6");
break;
}
}
public static GameFactory factory=new GameFactory(){
@Override
public Game getGame(){
return new ThrowDice();
}
};
}
转载于:https://www.cnblogs.com/grj0011/p/4845351.html
自学java 第十章内部类(二)相关推荐
- 自学java 第十章内部类(一)
今天学习了一部分java中的内部类. 内部类指将一个类的定义放在另一个类的内部,那它就是一个内部类. 指明一个引用时内部类的类型可以通过"外部类名.内部类名"的写法声明,如果想返回 ...
- Java学习笔记二十:Java中的内部类
Java中的内部类 一:什么是内部类: (1).什么是内部类呢? 内部类( Inner Class )就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. (2).那为什么要将一个类定 ...
- java出路_大二的学生自学Java有出路吗?
你好,看了你的描述,你是非计算机专业,这个其实和你学习java是没有影响的,我自己也是非计算机专业的,一样的从事JAVA工作. 而且IT行业很多的人都不一定是本专业的,还拥有一本学历,很多的大专的都从 ...
- 来自一个大二学生自学Java一个月的感受,新人学习
我,大二学生,一个期盼自己有一天成为黑客大佬的癞蛤蟆,而且还是金皮的. 癞蛤蟆的开始 因为自己从小对电脑有特别的兴趣,而且看了许多关于黑客的文字或视频资料,让自己一度想成为像剧情里的黑客一样,可以呼风 ...
- opcua 入门简介 java_大二的学生自学Java有出路吗?
这个是技术,学好了必须是有出路的,当然你喜不喜欢还得看后面的学习情况,三天热火气的情况大有人在,更有甚者就是,系统培训完,上了半年的班了,后转行到别的也有,所以兴趣是自己的最大的老师, 大学都会很迷茫 ...
- 【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作
零基础自学 Java,大概多久可以找到工作? 最近又有一个读者"在你的世界各地"向我提了上面这个问题.但说实话,这个问题并不太好问答.因为 Java 是一门"历史悠久&q ...
- 【大学四年自学Java的学习路线】观语如临情中景,无限感激言岂尽。 自知无兄难过河,谢言不叙恩情记!
零基础自学 Java,大概多久可以找到工作? 最近又有一个读者"在你的世界各地"向我提了上面这个问题.但说实话,这个问题并不太好问答.因为 Java 是一门"历史悠久&q ...
- 自学 java如何入门?
玩Java多年的老司机带你上车全面系统学习Java,并且还能教你如何学习才能在今年拿到一份不错的offer. 说到系统全面,就是以目前绝大部分公司招聘要求的知识内容为基准,毕竟我们学习Java都是为了 ...
- 自学Java如何正确入门?
前言 说到系统全面,就是以目前绝大部分公司招聘要求的知识内容为基准,毕竟我们学习Java都是为了高薪工作,<史记>中说"天下熙熙皆为利来,天下攘攘皆为利往",为了高薪工 ...
最新文章
- Python语言学习:利用pandas对两列字段元素求差集(对比两列字段所有元素的异同)
- MySQL中用户授权/删除授权的方法
- Android—RecyclerView相关内容
- [转]《吐血整理》系列-顶级程序员工具集
- [HNOI2012]集合选数(思维构造 + 状压dp)
- 在php 添加时间,在PHP中添加时间
- CF 468B Two Sets
- Linux 命令(18)—— screen 命令
- 【DL】一文读懂深度学习中的N种卷积
- PreparedStatement批量处理和事务
- Spring Cloud Alibaba Nacos之服务注册中心
- uni-app - 最新自定义连接安卓模拟器配置到 MUMU 模拟器运行程序(将uni-app运行到MuMu模拟器上进行调试,配置电脑手机模拟器 MUMU 运行测试)
- 厦门大学2019年数学分析考研试题
- 打工人也不好惹!一份校招“恶霸”指南强势冲上GitHub热榜,一天暴涨 1000 星!
- 关闭windows Defender的自动扫描
- java+mail+authen_javamail实现smtp身份认证
- 感悟爱情的空间说说:总有一个人,一直住在心底,却消失在生活里。
- 51单片机-RGB灯带
- 简单双拼入门,一看就会,看完就用.
- 湖南c语言程序设计,C语言程序设计