1.为什么java语言有跨平台特性?
java语言是一次编译,多次运行的,java编译器会将源文件编译为二进制字节码(.class),然后字节码在jvm上直接运行(解释执行)的。
因为是运行在jvm虚拟机上的,所以它的代码就能不经修改在不同平台的jvm上运行,window或unix的jvm是已经开发好了的,有jvm就可以四处运行(而jvm是安装jre或jdk就有的)。
2.什么时候使用接口,什么时候使用抽象类?
使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。
当需要为一些类提供公共的实现代码时,应优先考虑抽象类 。因为抽象类中的非抽象方法可以被子类继承下来,使实现功能的代码更简单。
抽象类只能是单继承的,不能多继承。
当注重代码的扩展性跟可维护性时,应当优先采用接口。
接口与实现它的类之间可以不存在任何层次关系,接口可以实现毫不相关类的相同行为,比抽象类的使用更加方便灵活;接口只关心对象之间的交互的方法,而不关心对象所对应的具体类。接口是程序之间的一个协议,比抽象类的使用更安全、清晰。一般使用接口的情况更多。