实验与思考作业4
1. d=m;
这行代码会导致错误,因为你不能将一个父类对象赋值给一个子类变量。在这种情况下, m
是 Mammal
类型的对象,而 d
是 Dog
类型的变量。
3. d=c;
这行代码同样会导致错误,因为 c
是一个 Cat
类型的对象,而 d
是 Dog
类型的变量。你不能将一个子类对象赋值给一个不兼容的子类变量。
首先,在父类Parent中定义了一个名为myValue的变量,并初始化为100。父类还定义了一个printValue()方法,用于打印myValue的值。
接着,子类Child继承了父类Parent,并在子类中定义了一个同名的myValue变量,并初始化为200。子类还重写了父类的printValue()方法。
在主函数中,首先创建了一个父类对象parent,并调用其printValue()方法,输出结果为"Parent.printValue(),myValue=100"。
然后,创建了一个子类对象child,并调用其printValue()方法,输出结果为"Child.printValue(),myValue=200"。
接下来,将子类对象child赋值给了父类对象parent,这是一种多态的表现。此时,父类对象parent指向了子类对象child。
然后,再次调用父类对象parent的printValue()方法,输出结果为"Child.printValue(),myValue=200"。这是因为在多态中,方法的调用是根据对象的实际类型来决定的,而不是变量的类型。
接着,通过父类对象parent的引用,对myValue进行自增操作,即parent.myValue++。此时,父类对象parent的myValue变为101。
再次调用父类对象parent的printValue()方法,输出结果为"Child.printValue(),myValue=200"。这是因为子类Child中的myValue变量并没有被修改,仍然是200。
最后,通过强制类型转换,将父类对象parent转换为子类对象Child,并对myValue进行自增操作,即((Child)parent).myValue++。此时,子类Child的myValue变为201。
再次调用父类对象parent的printValue()方法,输出结果为"Child.printValue(),myValue=201"。这是因为通过强制类型转换,父类对象parent被视为子类对象Child,所以调用的是子类Child中的printValue()方法。
多态看上去蛮复杂的,那么,最初设计出它们的那些牛人们,到底是怎么想的? 多态对开发到底有什么好处呢? 为什么它被看成是面向对象编程技术中最重要的特性之一?
多态是面向对象编程中的一个重要概念,它允许不同的对象对同一消息做出不同的响应。多态的设计初衷是为了提高代码的灵活性和可扩展性。
多态对开发有以下好处:
1. 代码重用性:通过多态,可以定义通用的接口或基类,然后派生出具体的子类。这样可以减少重复的代码,提高代码的可维护性和可读性。
2. 可扩展性:当需要添加新的功能时,可以通过扩展已有的类或接口来实现,而无需修改已有的代码。这样可以降低系统的耦合度,使代码更易于扩展和维护。
3. 简化代码逻辑:多态可以通过统一的接口来处理不同的对象,减少了条件语句的使用。这样可以简化代码逻辑,使代码更清晰、易懂。
多态被视为面向对象编程技术中最重要的特性之一,原因如下:
1. 抽象和封装:多态可以通过定义抽象的接口或基类,将对象的共同行为抽象出来,并封装在接口或基类中。这样可以隐藏对象的具体实现细节,提高代码的安全性和可维护性。
2. 可替代性和可扩展性:多态允许不同的对象实现相同的接口或继承相同的基类,从而可以在不改变原有代码的情况下替换或扩展对象的行为。这样可以提高代码的灵活性和可扩展性。
3. 多态性和动态绑定:多态性使得程序在运行时能够动态地确定对象的类型,并调用相应对象的方法。这样可以根据实际情况选择合适的方法,提高代码的灵活性和可扩展性。
总的来说,多态在面向对象编程中扮演着重要的角色,它能够提高代码的灵活性、可扩展性和可维护性,使代码更加简洁、清晰、易懂。
本文作者:丰川扬子
本文链接:https://www.cnblogs.com/newzeon/p/17761829.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步