跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
面向对象三大特性
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{Note|本章节适用于Java初学者及需要巩固面向对象基础的程序员。内容将结合理论、代码示例和实际应用场景进行讲解。}} = 面向对象三大特性 = 面向对象编程(Object-Oriented Programming, OOP)的三大核心特性是'''封装'''、'''继承'''和'''多态'''。这些特性共同构成了Java语言的设计基础,使代码更模块化、可重用和易维护。 == 1. 封装(Encapsulation) == 封装是将数据(属性)和行为(方法)捆绑在一起的机制,同时对外隐藏内部实现细节。 === 核心原则 === * 将字段设为私有(private) * 通过公共方法(getter/setter)控制访问 * 隐藏不必要的实现细节 === 代码示例 === <syntaxhighlight lang="java"> public class BankAccount { // 私有字段(数据隐藏) private double balance; private String accountNumber; // 公共方法(受控访问) public void deposit(double amount) { if (amount > 0) { balance += amount; } } public double getBalance() { return balance; } // 私有方法(内部实现细节) private void logTransaction(String type) { System.out.println("Transaction: " + type); } } </syntaxhighlight> === 实际应用 === * 银行系统:隐藏账户余额计算逻辑 * 用户认证:封装密码验证过程 * API设计:暴露必要接口,隐藏实现 == 2. 继承(Inheritance) == 继承允许创建基于现有类的新类,实现代码重用和层次结构组织。 === 类型体系 === <mermaid> classDiagram class Vehicle { +String brand +void startEngine() } class Car { +int numDoors +void openTrunk() } class Motorcycle { +boolean hasSidecar } Vehicle <|-- Car Vehicle <|-- Motorcycle </mermaid> === 代码示例 === <syntaxhighlight lang="java"> // 父类 class Animal { void eat() { System.out.println("Animal is eating"); } } // 子类 class Dog extends Animal { void bark() { System.out.println("Dog is barking"); } } // 使用 public class Main { public static void main(String[] args) { Dog myDog = new Dog(); myDog.eat(); // 继承自Animal myDog.bark(); // 自有方法 } } </syntaxhighlight> 输出结果: <pre> Animal is eating Dog is barking </pre> === 继承类型 === * 单继承(Java只支持单类继承) * 多级继承 * 接口多重继承(通过implements) === 实际应用 === * GUI组件库(Button → Component) * 游戏开发(Enemy → Character) * 企业系统(Manager → Employee) == 3. 多态(Polymorphism) == 多态允许不同类的对象对同一消息做出不同响应,分为编译时多态(重载)和运行时多态(重写)。 === 方法重载(Overloading) === 同一类中方法名相同但参数不同: <syntaxhighlight lang="java"> class Calculator { int add(int a, int b) { return a + b; } double add(double a, double b) { return a + b; } String add(String a, String b) { return a.concat(b); } } </syntaxhighlight> === 方法重写(Overriding) === 子类重新定义父类方法: <syntaxhighlight lang="java"> class Bird { void fly() { System.out.println("Bird is flying"); } } class Penguin extends Bird { @Override void fly() { System.out.println("Penguin can't fly"); } } </syntaxhighlight> === 多态原理 === * 向上转型(Upcasting):父类引用指向子类对象 * 动态绑定(Dynamic Binding):运行时确定实际调用方法 === 实际应用 === * 支付系统(Payment接口 → 多种支付方式) * 插件架构(统一接口不同实现) * 集合框架(List接口 → ArrayList/LinkedList) == 数学基础 == 多态的实现基于'''Liskov替换原则'''(LSP): <math> \forall x : T. \forall y : S. \text{如果} S \leq T \text{那么} y \text{可替换} x </math> == 综合案例:电商系统 == <mermaid> classDiagram class Product { <<abstract>> +String name +double price +abstract void display() } class Book { +String author +void display() } class Electronics { +String warranty +void display() } Product <|-- Book Product <|-- Electronics </mermaid> 实现代码: <syntaxhighlight lang="java"> public class Main { public static void main(String[] args) { Product[] cart = { new Book("Java编程", 59.99, "John Doe"), new Electronics("手机", 2999.99, "2年") }; for (Product p : cart) { p.display(); // 多态调用 } } } </syntaxhighlight> == 常见问题 == {{Q&A |问题1 = 封装是否意味着所有字段都必须私有? |答案1 = 不是绝对的。虽然封装推荐私有化字段,但有时protected或包私有访问更合适,特别是在框架设计中需要子类访问的情况。 }} {{Q&A |问题2 = Java为什么不支持多继承? |答案2 = 为避免"菱形继承问题"带来的复杂性。Java通过接口实现多重继承的替代方案。 }} == 最佳实践 == * 封装:优先使用private,逐步放宽访问控制 * 继承:遵循"is-a"关系,避免过度继承 * 多态:面向接口编程,而非具体实现 == 总结表 == {| class="wikitable" |+ 三大特性对比 ! 特性 !! 关键点 !! 实现方式 !! 优势 |- | '''封装''' || 信息隐藏 || private字段 + 公共方法 || 安全性、易维护 |- | '''继承''' || 代码复用 || extends关键字 || 层次结构、扩展性 |- | '''多态''' || 多种形态 || 重载/重写 + 向上转型 || 灵活性、可扩展 |} [[Category:Java基础]] [[Category:面向对象编程]] [[Category:计算机科学]] [[Category:面试技巧]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:Note
(
编辑
)
模板:Q&A
(
编辑
)