黑马程序员技术交流社区
标题:
内部类的用法?
[打印本页]
作者:
zhangx
时间:
2013-4-14 09:22
标题:
内部类的用法?
匿名内部类能不能继承其它的类和实现接口啊?
作者:
①人←①城市
时间:
2013-4-14 09:33
本帖最后由 ①人←①城市 于 2013-4-14 09:36 编辑
匿名内部类在实现时必须借助一个类或一个接口,若从这个层次上讲它是可以继承其他类也可以实现接口的,
但若是通过extends或implements关键字那是不可能的
作者:
王洪宇
时间:
2013-4-14 09:43
本帖最后由 王洪宇 于 2013-4-14 09:45 编辑
匿名内部类本身已经实现了一个接口或父类。
正常实现方法:
一。新建类A继承类B,并重写run()方法
class A extends B{
@override
public void run(){
//方法体
}
}
二。新建类A实现接口C,并重写run()方法
class A implements C{
@Override
public void run(){
//方法体
}
}
匿名内部类方式:
一.新建一个匿名内部类的实例(new出来的是实例),继承类B,重写run()方法
new B(){
@Override
public void run(){
//方法体
}
}
二.新建一个匿名内部类的实例,实现接口c,并重写run()方法
new C(){
@Override
public void run(){
//方法体
}
}
作者:
周一川
时间:
2013-4-14 10:02
可以继承其他类或实现其他接口。不仅是可以,而是必须!
作者:
李程
时间:
2013-4-14 11:04
匿名内部类
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口
3,匿名内部类的格式:new 父类或者接口(){定义子类的内容}
4,其实,匿名内部类就是一个匿名子类对象,即把定义子类和其对象一步完成。
例如,上代码:
new AbsDemo()
{
void show()
{
System.out.println(x)
}
}
5,匿名内部类中定义的方法最好不要超过2个,否则阅读性很差,这个时候就不要用匿名了
6,使用匿名内部类的情况:例如一个类要实现一个接口,然后用这个类的对象作为一个函数的参数的时候,这时候观察我需要实现的功能不超过两个,就可以直接在参数位置定义一个匿名内部类。
作者:
zhuiyi0819
时间:
2013-4-14 11:09
匿名内部类必须指定父类或者指定实现的接口
new 父类或接口(){}
必须指定父类或者实现的接口。
匿名内部类与正常类不一样,它只能指定一个要继承的类或者是指定一个要实现的接口。两者不能兼得!
实现接口,也只能实现1个。要实现接口,就不能指定父类!
作者:
乘鱼飞
时间:
2013-4-14 11:37
本帖最后由 乘鱼飞 于 2013-4-14 11:42 编辑
内部类的上一级是类(外部类),所以可以用static修饰(静态内部类)。
内部类可以直接访问外部类的成员,包括private修饰的成员。
非静态内部类,在外部类外创建实例时,必须先创建外部类的实例,然后用外部类.new 非静态内部类();
举例说明:http://blog.sina.com.cn/u/2742093933
匿名内部类:刚学完集合里面的定制排序就用了匿名内部类
如:TreeSet<Students> set=new TreeSet<Students>(new Comparator<Students>(){
public int compare(Students s1,Students s2){
if(s1.getScore()>s2.getScore())
{
return -1;
}
else if(s1.getScore()<s2.getScore())
{
return 1;
}else
{return 0;}
}
});//匿名内部类
set.add(new Students("zhangsan",69.5));
set.add(new Students("lisi",78.9));
作者:
花伟昌
时间:
2013-4-14 12:42
匿名内部类的前提:内部类必须继承一个父类,或实现一个接口。
匿名内部类的格式:new 父类或接口(){ };
匿名内部类是内部类的简写格式。
class DemoA{
public String name;
public int age;
public void set(String name,int age){
this.name=name;
this.age=age;
}
public int getAge(){
return this.age;
}
public String getName(){
return this.name;
}
}
class DemoB{
/* class DemoC extends DemoA{//创建一个内部类,继承一个父类
}
public void show(){
DemoC b=new DemoC();
b.set("李四",22);
System.out.println(b.getAge());
System.out.println(b.getName());
}*/
//将注释的内容用匿名内部类的形式表现。
public void show(){
DemoA demoa=new DemoA(){
};
demoa.set("李四",22);
System.out.println(demoa.getAge());
System.out.println(demoa.getName());
}
}
public class Demo{
public static void main(String []args){
new DemoB().show();
}
}
作者:
〃Mr.Zぐ
时间:
2013-4-14 15:50
内部类的用法几乎等同于一般类,只是使用外部类变量的时候需要将外部类变量设置为final.因为内部类使用外部变量时,仅仅使用的是他的一个副本,所以说,即便内部类使用的变量更改了,在外部类中也不会有变化,这也是sun为了提醒程序员的一种方法...
同样的,匿名内部类也可以继承或实现一类或方法,用法为:
JButton btn = new JButton("click");
btn.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e){//some mothod...}
});
内部类除了实现一个接口也可以继承一个类,语法都是同上述的"new ActionListener()",(你也可以去继承一个适配器类,为了万无一失,我刚还专门测试了一下)
之所以swing用的内部类比较多,是因为他需要用到注册监听器机制,而该监听类如果只服务于一个组件,那么,将该类设置成内部类/匿名类是最方便的.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2