Java 面向对象一览
内容提要
本文介绍Java面向对象核心知识:Java是纯面向对象语言,具有跨平台、安全、健壮等特点,与C++在编译方式、多继承和内存管理上不同。面向对象以对象行为为核心,四大特征为抽象、封装、继承、多态:抽象用于建模,封装隐藏数据,继承复用代码,多态实现运行时动态调用。文中还讲解类、变量、方法、抽象类、接口、内部类、序列化及访问权限等内容。
延伸解读
从面向过程到面向对象:思维方式的转变
文章用“把大象放进冰箱”的例子对比了两种编程思维:面向过程关注步骤,面向对象关注对象行为。当场景变化时,面向过程的代码需要重写,而面向对象通过抽象共性(如门、动物)提升复用性。这解释了为什么大型软件多采用面向对象语言,也为后续理解封装、继承、多态奠定了基础。
Java 与 C++ 的关键差异:跨平台与内存管理
文章指出 Java 是解释编译混合型语言,依赖 JVM 实现跨平台,而 C++ 是编译型语言,直接执行机器码。此外,Java 不支持多继承和指针,并通过垃圾回收自动管理内存,C++ 则需要手动管理。这些差异影响了语言的选择:Java 更适合需要快速开发和跨平台部署的场景。
抽象类与接口:is-a 与 can-do 的区分
文章强调抽象类表示 is-a 关系,符合里氏替换原则,而接口表示 can-do 能力。例如,大象是一种动物(抽象类),鸟和宇宙飞船都有飞的能力(接口)。这种区分帮助设计更清晰的类层次结构,避免滥用继承,同时接口支持多实现,弥补了 Java 单继承的限制。
多态的实现条件与运行时行为
多态发生在方法覆写场景,需要继承、覆写和向上转型三个要素。文章通过 Object 引用指向 Animal 实例的例子说明,实例方法调用基于运行时实际类型,而非声明类型。这意味着程序可以在不修改调用代码的情况下,通过子类覆写扩展行为,提高了代码的灵活性和可扩展性。
Q&A
Java 和 C++ 在面向对象方面有哪些主要区别?
Java 是纯面向对象语言,C++ 是面向对象和面向过程混合;Java 不支持多继承和指针,C++ 支持;Java 通过垃圾回收自动管理内存,C++ 需要手动管理;Java 是解释编译混合型语言,具有跨平台特性,C++ 是编译型语言。
面向对象的四大特征分别解决了什么问题?
抽象解决模型的定义问题;封装解决数据的安全问题;继承解决代码的重用问题;多态解决程序的扩展问题。
Java 中抽象类和接口有什么区别?
抽象类是对同类事物的抽象,包含抽象方法、实例方法和成员变量,体现 is-a 关系,需符合里氏替换原则;接口是要求普通类实现,体现 can-do 关系,表达对象具备的能力。如果一个抽象类只有一个抽象方法,它就等于一个接口。
Java 中实现多态的三个要素是什么?
继承、覆写和向上转型。即两个类之间有继承关系,子类覆写了父类的某个方法,方法的引用会指向子类的实现处。
Java 中成员变量和静态变量有什么区别?
成员变量也叫实例变量,每个实例都有独立的变量,各实例间互不影响;静态变量用 static 修饰,所有实例共享同一个变量,无需实例化即可通过类名访问,任一实例的修改都会影响该变量值。
Java 中类的访问权限修饰符有哪些?分别有什么作用?
有 public、protected、private 和缺省四种。public 全局可访问;protected 本类、子类及同包类可访问;缺省仅同包类可访问;private 仅本类可访问。对类使用时只有 public 和缺省两种。
Java 中序列化是什么?常见的序列化方式有哪些?
序列化是将数据对象转换成二进制流的过程,反序列化是恢复过程。常见方式有:Java 原生序列化(兼容性好,不支持跨语言,性能一般)、Hessian 序列化(支持跨语言,性能高效)、JSON 序列化(可读性好,但有安全风险)。