八、三大特性~多态

多态定义:父类指针指向子类对象
多态的好处:如果参数中使用的是父类类型,可以传入父类、子类对象
多态的限制:父类类型的变量,不能用来调用子类特有的方法
对象类型强制转换:将aa转为Dog *类型的变量,转变后编译器不会警告
Animal *aa = [Dog new];
Dog *dd = (Dog *)aa;
### 面向对象编程中的多态特性 #### 什么是多态多态是指同一操作作用于不同的对象,可以有不同的解释,从而产生不同的执行结果[^1]。它是一种重要的面向对象特性,能够提高代码的灵活性和可扩展性。 #### 多态的表现形式 多态主要分为两种表现形式:静态多态(编译时多态)和动态多态(运行时多态)。 - **静态多态** 静态多态通常通过函数重载或运算符重载实现,在编译阶段就已经确定了具体的操作行为[^2]。例如,同一个方法名可以通过接受不同类型的参数来表现出多种形态。 - **动态多态** 动态多态则是在程序运行期间根据对象的实际类型决定调用哪个方法,这种机制依赖于继承和虚方法/抽象方法的支持[^4]。当子类覆盖父类的方法时,即使变量声明为父类类型,也会调用子类中定义的具体实现。 #### 实现多态的关键条件 要实现多态,需满足以下几个前提条件: 1. 存在一个继承关系; 2. 方法被重新定义 (Override),即子类提供了与父类同签名但功能可能有所差异的新版本; 3. 使用父类引用指向子类实例的对象[^5]。 #### 示例代码展示 以下是基于 Java 的简单例子展示了如何利用继承以及方法覆写达成基本的多态效果: ```java // 定义一个动物基类 class Animal { public void makeSound() { System.out.println("Some generic animal sound"); } } // 创建狗类作为动物的一个特定种类 class Dog extends Animal { @Override public void makeSound() { System.out.println("Woof woof!"); } } // 创建猫类作为另一个具体的动物类别 class Cat extends Animal { @Override public void makeSound() { System.out.println("Meow meow!"); } } public class PolymorphismExample { public static void main(String[] args) { // 将不同类型赋给相同的数据类型(Animal) Animal myDog = new Dog(); Animal myCat = new Cat(); // 调用各自特有的发声动作 myDog.makeSound(); // 输出 Woof woof! myCat.makeSound(); // 输出 Meow meow! // 即使都是animal类型,但是由于实际创建的是dog/cat所以会分别打印对应的声音 } } ``` 此段代码清晰地体现了动态绑定的概念,其中`myDog` 和 `myCat` 变量虽然都属于 `Animal` 类型,但由于它们实际上分别是 `Dog` 或者 `Cat` 对象,因此最终执行的结果取决于各自的类定义。 #### 多态的优势 采用多态技术有诸多好处,包括但不限于以下几点: - 提升代码复用率,减少重复劳动[^3]; - 方便后续维护与升级,增强系统的开放封闭原则适应能力; - 让应用程序更加灵活易变,面对需求变化能迅速调整策略而不必修改原有逻辑结构. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值