大部分的书上都说,接口与抽象类无法创建自己的实例,必须依靠继承或者实现的子类来创建实例,其实这种说法并不是很严谨,对于接口与抽象类,只要在创建其实例的同时,重写其抽象方法,便可建立其实例。请大家谈一下看法,也请大牛给解释一下。这是我下午做的实验,编译没问题,完美通过。
- Java code
public abstract class Atest { String name; public Atest(String name){ this.name = name; } abstract void play();}public interface TestInterface { void play();}public class Test1 { Atest t = new Atest("ns"){ @Override void play() { // TODO Auto-generated method stub System.out.println("hello"); } }; TestInterface s = new TestInterface() { @Override public void play() { System.out.println("hello"); } }; }
------解决方案--------------------
你的那种写法是匿名内部类。
相当于,创建一个实现了这个接口的匿名类的对象。
和在一起怕你看不懂
分开说。
你创建了一个对象,这个对象是一个匿名类的对象。
这个匿名类实现了这个接口(或抽象类)的 方法。
而与你说的抽象类和接口能实例化对象不是一回事。
你可以查查匿名内部类