[Amazon] Abstract Class 与 Anonymous Class
这是我面Amazon Intern的其中一个问题, 当时是解释什么是Abstract class, 我啪啦啪啦的说了一堆, 其中就说, 我们一般不实例化抽象类, 因为其中有抽象方法, 抽象方法会让实例变得毫无意义, 我的原话是meaningless, 这里的毫无意义是因为实例就是拿去直接用的, 然而其中如果有抽象方法, 说明这个实例是不完整的. 当时印度小哥立刻就问完, 你说抽象类能实例化么? 我说能的. 然后Amazon就那么离我而去了.
Talk is cheap. Show me the code
public abstract class Car { public int getAge(){ return 5; } public static void main(String[] args) { Car mycar = new Car(){}; System.out.println(mycar.getAge()); LinkedList list = new LinkedList(); } }
Car是一个抽象类, 我下面的main方法初始化了它. 是不是可以? 上面的code是无错的,而且跑的飞快.
上面的code有两个tricks:
- Car虽然是抽象类, 但是没有抽象方法, 所以它不是那么的”抽象”.
- 初始化Car的时候, 我用了Anonymous Class类初始化它, 并且Car又没有抽象的方法, 所以这个初始化是可以的.
其中匿名类初始化我们在做Comparator的时候经常使用, 只是里面的compare方法是抽象的,每次使用都需要定义一下, 而这里, Car中没有抽象方法, 所以就可以被当做匿名类初始化.
Again: 以上的代码并不和”抽象类不能实例化”冲突.
Leave A Comment