日期:2014-05-20  浏览次数:20665 次

关于接口与抽象类的一些看法与讨论
大部分的书上都说,接口与抽象类无法创建自己的实例,必须依靠继承或者实现的子类来创建实例,其实这种说法并不是很严谨,对于接口与抽象类,只要在创建其实例的同时,重写其抽象方法,便可建立其实例。请大家谈一下看法,也请大牛给解释一下。这是我下午做的实验,编译没问题,完美通过。
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");
                    
                }
            };
            
}


------解决方案--------------------
你的那种写法是匿名内部类。


相当于,创建一个实现了这个接口的匿名类的对象。

和在一起怕你看不懂

分开说。

你创建了一个对象,这个对象是一个匿名类的对象。

这个匿名类实现了这个接口(或抽象类)的 方法。

而与你说的抽象类和接口能实例化对象不是一回事。

你可以查查匿名内部类