A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗旭维 中级黑马   /  2012-4-27 10:21  /  3434 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

网上搜也是有说可以有说不可以的。

9 个回复

正序浏览
在Swing开发时,大家应该经常用到下面的代码:
JButton btnTest = new JButton();
btnTest.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// do something here
}};

通过匿名内部类的使用,我们可以方便地建立一个只能在此按钮中起作用的一个ActionListener接口的实现,这个实现只在该位置可用。

那么,能不能将这里的接口改为一个抽象类,甚至一个普通的类呢?看一下下面代码:

public class Test {
public static void main(String[] args)
{
  Demo d = new Demo()
  {
   protected void showMessage()
   {
    System.out.println("Printed by inner class");
   }
  };
  d.showMessage();
}
}
class Demo
{
protected void showMessage()
{
  System.out.println("Printed by demo");
}
}


代码运行结果为:

Printed by inner class

同样,如果我们只需要一次性地重写某类的一个方法,同样也可以使用这种方式,在定义一个对象时对这个类进行匿名地继承,产生一个需要的特殊的类。
回复 使用道具 举报
匿名内部类继承接口,还有Object是所有类的父类,所以应该是可以继承的。
回复 使用道具 举报
施俊 中级黑马 2012-4-27 10:48:29
8#
问的是其他类而不是自己已经继承的那个类吧?要是是的话就不能继承其他类。原因见沙发
回复 使用道具 举报
丁佼 黑马帝 2012-4-27 10:47:47
7#
匿名内部类本身就是一个对父类或者接口的简短继承和直接实现,再继承一个类,应该是不能吧。
new Runnable extend ArrayList(){}
这样的代码,怎么看也不舒服嘿,

再实现几个接口的话应该是可以的,
new ArrayList implement Runnable (){}
至少看着不是很怪异。

============================
不过最直接的验证还是把代码拿去编译,java说,我上面两种都不可以。。。。
判断:
1、java不可以在匿名内部类上再继承或实现接口
2、从实际工作需要判断一下,这种继承和接口实现是否需要。显然普通类有这种需求,匿名内部类也是类,不会没有,有需要,在实现上那就肯定是可以的,只是洒家不知道怎么写。
3、跪求高手出现。。。。工作做了,要是不发出来我就抑闷了。。。
回复 使用道具 举报
内部类必须继承了一个外部类,或者实现了外部的接口
new 父类名or接口名(){子类的具体内容}
其实匿名内部类就是一个子类匿名对象
内部类的访问规则:
1,内部类可以直接访问外部类中的成员
2,外部类需要创建内部类对象才可以访问内部类中的成员
在描述事物时,事物中还有具体的事物,而且这个内部事务在访问着外部事物的内容,这时对这内部事务的描述,就可以用内部类来完成
内部类处于外部类的成员位置上是可以被成员修饰符所修饰的
回复 使用道具 举报
我也查了查,个人理解是这样的
说可以的意思是说:匿名内部类定义时就已经继承了某个类的,建立的是匿名子类对象
说不可以的意思是说:因为本来已经继承了某个类所以不可以再继承其他类,所以不能再写extends语句
回复 使用道具 举报
可以的,
匿名内部类(Anonymous Inner Class ):匿名内部类会隐式地继承一个父类或实现一个接口。
使用匿名内部类时,new +类名/接口名
  1. import java.util.Date;

  2. public class AnonymousInnerClassTest
  3. {
  4. @SuppressWarnings("deprecation")
  5. public String get(Date date)
  6. {
  7. return date.toLocaleString();
  8. }

  9. public static void main(String[] args)
  10. {
  11. AnonymousInnerClassTest test = new AnonymousInnerClassTest();



  12. String str = test.get(new Date()  <FONT color=red<FONT color=red>>//这个就是继承Date类并实现Date类中的 toLocaleString()方法</FONT>
  13. </FONT>{
  14. public String toLocaleString()
  15. {
  16. return "hello world";
  17. }
  18. });

  19. System.out.println(str);
复制代码
回复 使用道具 举报
继承Object
回复 使用道具 举报
匿名内部类本身不就是一个类的子类或者一个接口的实现类么?既然继承是单向的,怎么会继承其他类呢?也没法写呀。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马