上述所有的类型中,只有class和final class属于实例类,可以直接创建它们的实例,两者的不同在于,final class不能再被其它类继承和扩展,且它的所有方法都将自动地设为final。设为final的方法不能被子类覆盖(如果可以有子类的话)。final类的中的字段不会被自动设为final。对于final字段,在对象构造以后,其值就不能再修改了。 interface和abstract class具有类似的功能,都必须被实现或继承才能发挥其价值,且继承或实现他们的实例类必须覆盖其中所有的抽象方法。不同点有3:1. 一个类只能扩展一个父类(class或abstract class),却可以实现多个接口,这是接口的主要价值所在。请问还有其它优于抽象类的价值吗?2. interface中只能定义常量,而抽象类没有这一限制。3. interface中的所有方法都必须是抽象方法(不能有方法体),且不需要abstract修饰符,抽象类中可以有实现了的方法(静态的和实例的),且其抽象方法必须有abstract关键字。 很多程序员认为抽象类中只能有抽象方法。这是不正确的。把尽可能多的功能,不管是不是抽象的,放到超类中是好的做法。特别是,要把通用字段和非抽象方法移到抽象超类中。 在应用时,选择类还是接口,选择什么样的类,主要是根据需要的字段、方法,以及类是否需要扩展等来确定,很难有固定而明确的说法。以上只是给了一些基础的原则,以免走了弯路。