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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

使用匿名内部类的前提为什么必须是要内部类继承一个抽象类或者接口

4 个回复

倒序浏览
有没有人?在线等
回复 使用道具 举报
楼主要是理解如何创建内部类的对象,那应该就明白这个问题了。匿名内部类是没有名字的类,这一点我不用多说楼主也知道。关键是没有名字,更没有class修饰,那么我们怎么用这个内部类呢?或者说我们都不知道如何写出这个内部类,只写一个大括号{},然后里面写代码显然不叫内部类,这叫代码块。所以,说到这你应该明白了,继承一个类或者实现一个接口可以用来创建出这个内部类的对象!在下才疏学浅,这是目前的我认为的一个主要原因,很可能还有其他原因,但这点应该能帮楼主明白一点你所问的问题。
回复 使用道具 举报
所谓匿名内部类就是没有名字并且是在类里面的一个类,还要进行实例化,要想实例化的话,首先你要有这个类,如果没有这个类的话,你怎么实例化呢,其实匿名内部类它只是把它的实例化,和所实现的代码都写在一起了,如果不继承一个抽象类或者接口的话,连类都没有的,它怎么实例化啊!
回复 使用道具 举报
所谓匿名内部类就是没有名字并且是在类里面的一个类,还要进行实例化,要想实例化的话,首先你要有这个类,如果没有这个类的话,你怎么实例化呢,其实匿名内部类它只是把它的实例化,和所实现的代码都写在一起了,如果不继承一个抽象类或者接口的话,连类都没有的,它怎么实例化啊!比如:
  1. public class DeathLock{

  2.    public static void main(String[] args) {

  3.        final Object lock1 = new Object();
  4.        final Object lock2 = new Object();

  5.        new Thread() {
  6.            public void run() {
  7.                synchronized (lock1) {
  8.                    System.out.println(Thread.currentThread().getName() + ":1");
  9.                    synchronized (lock2) {
  10.                        System.out.println(Thread.currentThread().getName() + ":2");
  11.                    }
  12.                }
  13.            };
  14.        }.start();

  15.        new Thread() {
  16.            public void run() {
  17.                synchronized (lock2) {
  18.                    System.out.println(Thread.currentThread().getName() + ":3");
  19.                    synchronized (lock1) {
  20.                        System.out.println(Thread.currentThread().getName() + ":4");
  21.                    }
  22.                }
  23.            };
  24.        }.start();
  25.    }
  26. }
复制代码

正因为有Thread这个类所以它才能够实例化!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马