Menu Sidebar
Menu

Java Knowledge

[Amazon] Abstract Class 与 Anonymous Class

这是我面Amazon Intern的其中一个问题,  当时是解释什么是Abstract class, 我啪啦啪啦的说了一堆, 其中就说, 我们一般不实例化抽象类, 因为其中有抽象方法, 抽象方法会让实例变得毫无意义, 我的原话是meaningless, 这里的毫无意义是因为实例就是拿去直接用的, 然而其中如果有抽象方法, 说明这个实例是不完整的. 当时印度小哥立刻就问完, 你说抽象类能实例化么? 我说能的. 然后Amazon就那么离我而去了. Talk is cheap. Show me the code

Car是一个抽象类, 我下面的main方法初始化了它. 是不是可以? 上面的code是无错的,而且跑的飞快. 上面的code有两个tricks: Car虽然是抽象类, 但是没有抽象方法, 所以它不是那么的”抽象”. 初始化Car的时候, 我用了Anonymous Class类初始化它, 并且Car又没有抽象的方法, 所以这个初始化是可以的. 其中匿名类初始化我们在做Comparator的时候经常使用, 只是里面的compare方法是抽象的,每次使用都需要定义一下, 而这里, Car中没有抽象方法, 所以就可以被当做匿名类初始化. Again: 以上的代码并不和”抽象类不能实例化”冲突.

Java == vs equals()

==比较的是:是否obj1和obj2在同一个内存.相比下,equals就是比较内容. 所以Object 要override equals()

 

书脊

倾城与倾国, 佳人难再得