java_接口可以new实例化吗

255 阅读1分钟
new Thread(new Runnable() {
            @Override
            public void run() {
                for(int i = 0;i<=40;i++){
                    ticket.sell();
                }
            }
        },"C").start();

Runnable是一个接口,Thread需要一个实现Runnable接口的对象,而我们这种写法中发现我们直接new了接口,给我们一种接口可以new的错觉。

其实不是的,其实这是一种匿名内部类的写法,new之后的括号中其实可以看做你写了一个类,实现了这个接口,重写了方法,只不过这个类是匿名的,没有名字,所以称为匿名内部类。

并且对象的创建最终都是需要调用构造方法,接口中是没有构造方法的,类中显示声明构造方法,但默认有空参构造方法,接口中是没有的

所以接口是不能够new的,只是匿名内部类的应用

转载链接:blog.csdn.net/CPrimer0/ar…

三个问题:

  1. 就是重新创建一个类,然后实现接口,但是需要new这个类对象的时候向上转型吗?
  2. 还是说不需要向上转型,只需要实现接口的对象就可以了?
  3. 然后可以向上转型吗?

回答:

  1. 首先涉及到了多态,编译类型在左边,运行类型在右边。只要你实现了接口,可以直接用实现类对象传入,不需要向上转型。
  2. 是的,也可以向上转型再传入,都是没问题的
  3. 可以的