AJPFX总结匿名类及其使用
匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。
内部类是在一个类的内部嵌套定义的类,
它可以是其它类的成员
也可以在一个语句块的内部定义
还可以在表达式内部匿名定义
匿名类与其他类的不同就在于匿名,也就是没有名称。
Java中允许创建子类对象时
除了使用父类的构造方法外
还可以用类体
匿名类就是一个没有类申明的类体,因为没有名称,所有匿名类不可以申明对象,但却可以使用类体创建对象。
例如:
A是一个子类,那么下面的代码就是A的一个子类(匿名类)创建对象。
new A(){
匿名类的类体
};
由于匿名类是一个子类,所以和有一般子类的特征。可以继承父类的方法,同样也可以重写父类的方法。
值得提醒的是,在使用匿名类时,一定是在某个类中直接用匿名类创建对象,因此匿名类必定是内部类,所以和其他匿名类一样可以访问外嵌类中的成员变量和方法。
非静态匿名类的类体中不可有static成员变量和static方法。
尽管匿名类没有申明(这里说的声明就是,没法给匿名类创建的匿名对象来定义一个变量接收)的步骤,但可以在创建匿名对象时返回一个引用赋值给匹配参数。
匿名类的常用方式是向方法的参数传值。
具体方法如下:
abstract class Speak{
public abstract void speakHello();
}
class Student{
void f(Speak sp){
sp.speakHello();
}
}
public class AnonymousClassDemo {
public static void main(String[] args) {
Speak speak = new Speak(){
public void speakHello(){
System.out.println("大家好,祝工作愉快!");
}
};
speak.speakHello();
Student st = new Student();
st.f(new Speak(){
public void speakHello(){
System.out.println("I am a student, how are you");
}
}
);
}
}
上面红色的代码就是使用匿名类创建的匿名对象赋值给f()方法的参数。
上面代码的抽象类改成接口同样适用
AJPFX总结匿名类及其使用的更多相关文章
- 浅谈Java的匿名类
在实际的项目中看到一个很奇怪的现象,Java可以直接new一个接口,然后在new里面粗暴的加入实现代码.就像下面这样.那么问题来了,new出来的对象没有实际的类作为载体,这不是很奇怪吗? 思考以下代码 ...
- Second Day: 关于Button监听事件的三种方法(匿名类、外部类、继承接口)
第一种:通过匿名类实现对Button事件的监听 首先在XML文件中拖入一个Button按钮,并设好ID,其次在主文件.java中进行控件初始化(Private声明),随后通过SetOnClickLis ...
- 学习笔记:因为java匿名类学习到接口的一些小用法
在看CometD的示例代码时发现了许多有意思的代码,但说实话看别人的代码确实是件很累的事情,所以就看到这个知识点做一下记录吧. 先看一段代码: 代码1 这段代码中有一个new的操作,而且是在方 ...
- .NET中那些所谓的新语法之二:匿名类、匿名方法与扩展方法
开篇:在上一篇中,我们了解了自动属性.隐式类型.自动初始化器等所谓的新语法,这一篇我们继续征程,看看匿名类.匿名方法以及常用的扩展方法.虽然,都是很常见的东西,但是未必我们都明白其中蕴含的奥妙.所以, ...
- HttpCookie加匿名类实现多语言
突然想做一个多语言网站,确不知道怎么实现好,突然想到了HttpCookie,然后页面后台用匿名类实现语言的储存. string lan = Request["str_lan"]; ...
- java匿名类和匿名对象及this的其他用法
/* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...
- c#匿名类,匿名对象
何谓匿名类,其实本质和普通定义的类一样,只不过是由系统的编译器来完成的,首先举个例子. 一般情况 //声明一个类,包含贴别多的字段 public class Person() { public str ...
- java:使用匿名类直接new接口
java中的匿名类有一个倍儿神奇的用法,见下面代码示例: package contract; public interface ISay { void sayHello(); } 上面是一个简单的接口 ...
- java内部类以及匿名类
内部类 一个类内部定义的类称为内部类. 内部类允许把逻辑相关的类组织在一起,并控制内部代码的可视性. 内部类与外部类的结构层次如下. 顶层类:最外层的类 外部类:内部类所在的类 内部类:类内部定义的类 ...
随机推荐
- VC FTP服务器程序分析(一)
想在QT上移植一个FTP服务器程序,先学习windows下的FTP服务器例子,然后随便动手写点东西. 在pudn上搜索 "FTP服务器端和客户端实现 VC“这几个关键字,就可以搜到下面要分析 ...
- (linux)块设备驱动程序
1.4.1 Linux块设备驱动程序原理(1) 顾名思义,块设备驱动程序就是支持以块的方式进行读写的设备.块设备和字符设备最大的区别在于读写数据的基本单元不同.块设备读写数据的基本单元为块,例如 ...
- Oracle备份与恢复:冷备份恢复
模拟数据库数据文件丢失的情况下,通过丢失之前的数据文件物理备份做恢复: 说明:数据文件丢失前一刻的所有归档日志都存在. 环境:oracle10g +rhel5 1.关闭数据库,copy system0 ...
- mysql 5.5升级到5.7版本操作流程
一.备份原来 phpStudy 中 MySQL 安装目录 二.把下载的 MySQL 压缩文件解压至 phpStudy 下的 MySQL目录,复制 my-default.ini ,重命名为 my.ini ...
- DC 兼容的DC
DC是 "Device Content" , MS VC++ 的 MFC图形设备接口 的 设备描述表.它是MFC的主要对象之一.通过CDC类进行各种绘图操作,例如选笔,选色,选涂色 ...
- 008--linux 基础之网络配置和ssh服务
一.linux网络配置 ifconfig eno16777736 192.168.19.48/24 | eno16777736(网卡名) 192.168.19.48/24(临时IP地址) ...
- hihocoder 1331 扩展二进制数(递归)
传送门 题意 略 分析 由低位向高位考虑,令f(n)为n的扩展二进制数表示数 1.当前数为偶数,末位为0或2,那么f(n)=f(n/2)+f(n/2-1) 2.当前数为奇数,末位为1,那么f(n)=f ...
- Managed C++ wtypes.h DATE 转化为 .net的 DateTime
http://stackoverflow.com/questions/570224/how-do-i-convert-from-mfcs-coledatetime-to-c-sharp-datetim ...
- python __builtins__ property类 (55)
55.'property', 获取对象的所有属性 class property(object) | property(fget=None, fset=None, fdel=None, doc=Non ...
- Luogu P1429 平面最近点对 【分治】By cellur925
题目传送门 题目大意:给定平面上n个点,找出其中的一对点的距离,使得在这n个点的所有点对中,该距离为所有点对中最小的.$n$<=100000. $Algorithm$ 最朴素的$n^2$枚举肯定 ...