class App
{
public static void main(String args[])
{
(
new Inner()
{
void setName(String n)
{
name = n;
System.out.println("姓名:"+name);
}
}
).setName("张华");
}
static class Inner
{
String name;
}
}
这个程序是正确的。可我不明白,Inner已经是内部静态类了,可是为什么 new Inner()中又可以定义方法呢??
{
public static void main(String args[])
{
(
new Inner()
{
void setName(String n)
{
name = n;
System.out.println("姓名:"+name);
}
}
).setName("张华");
}
static class Inner
{
String name;
}
}
这个程序是正确的。可我不明白,Inner已经是内部静态类了,可是为什么 new Inner()中又可以定义方法呢??
解决方案 »
- 关于BufferedReader的疑惑
- char型向String转换不需要写.ToString?
- 各位, 现在想用java 做一个系统运行管理平台,但是遇到难题。
- 线程同步问题
- 大家有办法 把一个类加载之后 再输出成一个文件保存在硬盘里吗?
- Jlist 怎么多行显示一条文本信息,譬如超过20个字符了,自动换行,但还是在一个Item里
- 各位兄弟介绍几个比教好的英语学习网站落!感谢!
- 有人有非测试版的sqlserver jdbc驱动程序吗?
- 为什么我得不到文件的大小?
- 很简单的问题,63分给你~
- 关于取${ XXXXXX } 取得${ }中间的值,使用java的正则表达式regx
- java 调用JNI 进程空间的问题
{
void setName(String n)
{
name = n;
System.out.println("姓名:"+name);
}
}
)
这是匿名内部类的写法了,相当于重新定义了一个类(类里当然可以写方法了),跟静态类没什么关系的。相关知识可以参看内部类部分。
public static void main(String[] args) {
class Inner1 extends Inner {
public void setName(String n)
{
name = n;
System.out.println("姓名:"+name);
}
}
new Inner1().setName("张华");
}
static class Inner
{
String name;
}
}其实Inner1从Inner继承过来的,当然可以引用name变量,还可以定义自己的方法,比如setName().
比如在这里:
Thread t = new Thread(new Runnable(){
public void run(){}
});
这里new Runnable,而Runnable是接口,那么实际上不是在new Runnable,而是new它的实现类,只不过这个实现类没有名字,即匿名类