黑马程序员技术交流社区
标题:
匿名内部类的问题。
[打印本页]
作者:
李有
时间:
2012-11-25 11:23
标题:
匿名内部类的问题。
匿名内部类 是否可以extends其它类,是否可以实现接口?
作者:
崔利鹏
时间:
2012-11-25 11:45
内部类的用法几乎等同于一般类,只是使用外部类变量的时候需要将外部类变量设置为final.因为内部类使用外部变量时,仅仅使用的是他的一个副本,所以说,即便内部类使用的变量更改了,在外部类中也不会有变化,这也是sun为了提醒程序员的一种方法...同样的,匿名内部类也可以继承或实现一类或方法,用法为:
JButton btn = new JButton("click");
btn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){//some mothod...}});
内部类除了实现一个接口也可以继承一个类,语法都是同上述的"new ActionListener()",(你也可以去继承一个适配器类,为了万无一失,我刚还专门测试了一下)之所以swing用的内部类比较多,是因为他需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的。
作者:
郑丹丹
时间:
2012-11-25 12:01
匿名内部类就是内部类的简写格式。
而内部类必须要继承一个类或实现接口,所以匿名内部类也要继承一个类或实现接口。
作者:
王舒玮
时间:
2012-11-25 22:09
匿名内部类就是这个类,没有名字,但一定会有父类或者是实现的接口,两者只能选其一!我们通常写匿名类时,只是在继承一个抽象类,或者是实现一个接口。使用匿名类一定要在new语句中使用,new后面跟随的是父类或者接口名称,语法格式:new 父类或者接口名(){类体};
作者:
王斌
时间:
2012-11-26 16:27
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
作者:
潘天功
时间:
2012-11-26 16:43
匿名内部类:没有名字的内部类。是内部类的简写形式。
前提:
内部类可以继承或实现一个外部类或者接口。
格式为:
new 外部类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)};
具体代码体现:
interface Inter
{
public abstract void show();
public abstract void show2();
}
class Outer
{
public void method()
{
//匿名内部类
new Inter() //返回的是接口的子类匿名对象
{
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
};
//如果调用方法呢?
new Inter() //返回的是接口的子类匿名对象
{
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
}.show();
new Inter() //返回的是接口的子类匿名对象
{
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
}.show2();
//上面调用太麻烦 多态
Inter i = new Inter() //返回的是接口的子类匿名对象
{
public void show()
{
System.out.println("show");
}
public void show2()
{
System.out.println("show2");
}
};
i.show();
i.show2();
}
}
class NiMingInnerClassDemo2
{
public static void main(String[] args)
{
Outer o = new Outer();
o.method();
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2