java - 编译时多态运行时多态是这样的吗?

标签 java c++ polymorphism

<分区>

从研究中我学到了什么:

重载、运算符重载和覆盖就是我们所说的多态性。

多态性意味着同一实体有时表现不同

例如:

参数化

add(12, 13);
add(12.2, 13.3);

相同的实体(add())有时表现不同(适用于 double,适用于 int)。

//模板也在这里工作

临时

Animal dogInstance = new Dog();
Animal catInstance = new Cat();
dogInstance.sound(); //bark
catInstance.sound(); //meow

同一实体(sound())有时表现不同
sound() 将根据实例(狗或猫)工作。

重载、模板和泛型发生在编译时(编译时多态)。
覆盖,运算符重载发生在运行时(运行时多态性)。

参数多态性是指同一代码可以应用于多种数据类型。
前任。重载、模板和泛型

临时多态性是指不同的代码用于不同的数据类型。
前任。覆盖,运算符重载

补充问题:

Why is operator overloading ad-hoc (dynamic binding)?

还有:

如果你是程序员,你应该介意运行时多态性、编译时多态性、动态链接、静态链接、框架意义,
框架和库之间的区别,什么是重量级框架意味着什么是轻量级框架等,或者我应该继续编程,只要我的程序能运行?

最佳答案

我会尝试以不同的方式回答您的两个问题。

编译时/运行时:在编译时,编译器只能验证语法正确的内容。它是运行时,它可以执行行为评估。例如

If you have two classes B and C extending A. There is one method is declared to return A. In your caller, you expect that it is going to return instance of B. You may type cast return value to B as (B)A. Compiler will not complain any issue here. But if at run time, it finds, your method is return instance of c, it will fail.

我在这里想解释的是:有些行为只能在运行时评估。

编程:当您编写小型教程程序时,您只关心程序的成功和您的基础学习。当您编写更大/大量使用的应用程序时,您必须非常小心。一切,例如字符串连接、变量选择、迭代次数、对象引用很重要。

希望对您有所帮助。

关于java - 编译时多态运行时多态是这样的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12793472/

相关文章:

c++ - boost 序列化多态性问题

c# - 对比 C# 泛型与 Haskell 参数化类型

Java继承和理解接口(interface)类

java - 试图找到一种方法将解析 Int 合并到我的计算器中

c++ - 如何在另一个#define 中实现#define?

c++ - boost::archive::text_iarchive 构造函数异常

java - 在 Android Studio 中使用 Cmake 未定义函数引用

java - Xstream - 删除值标签

c++ - std::async 和 std::future 行为

.net - 为什么 .net WCF 服务需要接口(interface)