Java面试基础:多态、接口与抽象类解析

需积分: 5 0 下载量 196 浏览量 更新于2024-06-18 4 收藏 64KB DOCX 举报
"这篇内容主要讨论了针对应届毕业生和初级开发工程师的面试问题,涵盖了Java相关的基础知识,包括面向对象的特性、多态的好处与实现、接口和抽象类的意义及其区别,以及Java编程中的不可变对象、变量类型、对象创建方式等核心概念。" 在Java编程中,面向对象的三大特征——封装、继承和多态是基础中的基础。封装确保数据安全,继承促进代码复用,多态则提供了灵活性和扩展性。多态允许不同类的对象对同一消息作出响应,增强了代码的可替换性和可扩充性,并提供了接口性和灵活性。实现多态的方式有三种:接口实现、继承父类重写方法和在同一类中进行方法重载。Java虚拟机通过动态绑定技术来实现多态,即在运行时判断对象的实际类型并调用相应的方法。 接口在Java中扮演着重要角色,它可以规范类的行为,提供扩展能力,并常用于回调机制。相比之下,抽象类则用于为子类提供公共类型,封装重复内容,以及定义抽象方法。接口和抽象类之间有明显区别,接口中的方法默认是抽象的,而抽象类可以包含非抽象方法;接口的静态方法不能被子类重写,但可以隐藏。 不可变对象是指一旦创建就无法改变状态的对象,如Java中的String和Integer。它们确保了对象的不变性,有利于并发和安全性。尽管如此,一个不可变对象仍然可以包含可变对象的引用,只要不暴露这个引用,而是返回可变对象的副本,就可以在保持不可变性的同时实现内部状态的变化。 在Java中,静态变量存储在方法区,属于类的共享资源,而实例变量存储在堆中,每个实例都有自己独立的副本。不可变对象可以包含可变对象,关键在于不直接暴露可变对象的引用,避免外部直接修改。 创建Java对象有多种方式,最常见的是使用`new`关键字,其次是通过反射和克隆,还可以利用序列化机制。其中,使用`new`关键字创建对象会带来较高的耦合性,因此在设计框架时往往尽量减少直接依赖构造方法的调用。 自Java 7起,`switch`语句开始支持`String`类型作为参数,之前的版本仅支持基本类型和枚举。至于`byte`和`long`,`switch`可以接受`byte`,但不支持`long`,这与Java的设计选择和效率考虑有关。