java - 静态/编译时多态性
问题描述
为什么方法重载称为静态或编译时 多态性
Java 中的示例。
class StaticPolymorphismSample {
void polymorphicMethod(int a) {
}
void polymorphicMethod(int a, int b) {
}
void polymorphicMethod(String a) {
}
void nonPolymorphicMethod(int a) {
}
void nonPolymorphicMethod1(int a) {
}
}
所以我的问题是。
为什么我们说方法重载(在这种情况下polymorphicMethod
是方法)是静态多态性,而另一种方法(nonPolymorphicMethod(int a)
nonPolymorphicMethod1(int a)
)不是多态性。
从技术上讲,我看不出具有相同名称和不同参数的方法与具有不同的方法之间的不同,此处的所有答案和谷歌中的主题不适用于我的问题。
解决方案
之所以不将其视为多态是因为nonPolymorphicMethod1(int a)
它的名称与其他非多态方法不同。
For nonPolymorphicMethod( int a, int b )
andnonPolymorphicMethod( int a )
这些不被认为是多态的,因为它们不采用相同的参数。编辑这是错误的,请参阅下一行
您展示的其他方法是多态的,因为它们共享名称,但参数类型或参数数量不同。
方法中多态性的一个更好的例子是:
public abstract class ClassA
{
public Object getObject()
{
return new Object();
}
}
public class ClassB extends ClassA
{
@Override
public ClassB getObject()
{
return new ClassB();
}
}
public class ClassC extends ClassA
{
@Override
public ClassC getObject()
{
ClassC example = new ClassC();
example.doStuff();
return example;
}
private void doStuff()
{
// Do Something To Change The Object
}
}
推荐阅读
- javascript - 如何防止函数多次运行?- Javascript
- google-api - 401 Unauthorized on Google Photos API with API Key
- jquery - jquery select each "row" of floated childs
- node.js - Make api call if value from mongoDB is null
- lwip - Identify socket using protocol control block
- php - Web 服务器如何执行 php 或任何 cgi 脚本?
- c# - Sending HTML file with Images through email IOS
- c - 在 qmake 中设置 C 标准
- php - 我的蛋糕不会烤
- c# - 可以在通用枚举类型上使用扩展方法吗?(不是枚举值)