实验与思考作业4

 

 

1. d=m; 这行代码会导致错误,因为你不能将一个父类对象赋值给一个子类变量。在这种情况下, mMammal 类型的对象,而 dDog 类型的变量。

3. d=c; 这行代码同样会导致错误,因为 c 是一个 Cat 类型的对象,而 dDog 类型的变量。你不能将一个子类对象赋值给一个不兼容的子类变量。

首先,在父类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 中国大陆许可协议进行许可。

posted @   丰川扬子  阅读(13)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.