你能用Java编写虚函数/方法吗?
是否可以像在 C++ 中那样在 Java 中编写虚拟方法?
或者,是否有一种合适的 Java 方法可以实现来产生类似的行为?我可以举一些例子吗?
Is it possible to write virtual methods in Java, as one would do in C++?
Or, is there a proper Java approach which you can implement that produces similar behavior? Could I please have some examples?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
来自 维基百科
From wikipedia
你会用Java写虚拟函数吗?
是的。事实上,Java中的所有实例方法默认都是虚拟的。只有某些方法不是虚拟的:
以下是一些示例:
“普通”虚拟函数
以下示例来自 另一个答案中提到的维基百科页面的旧版本。
输出:
带有接口的虚拟函数示例
Java 接口方法都是虚拟的。它们必须是虚拟的,因为它们依赖于实现类来提供方法实现。要执行的代码只会在运行时选择。
例如:
带有抽象类的虚函数示例。
与接口类似抽象类必须包含虚拟方法,因为它们依赖于扩展类的实现。例如:
Can you write virtual functions in Java?
Yes. In fact, all instance methods in Java are virtual by default. Only certain methods are not virtual:
Here are some examples:
"Normal" virtual functions
The following example is from an old version of the wikipedia page mentioned in another answer.
Output:
Example with virtual functions with interfaces
Java interface methods are all virtual. They must be virtual because they rely on the implementing classes to provide the method implementations. The code to execute will only be selected at run time.
For example:
Example with virtual functions with abstract classes.
Similar to interfaces Abstract classes must contain virtual methods because they rely on the extending classes' implementation. For Example:
Java 中的所有函数默认都是虚拟的。
您必须通过添加“final”关键字来特意编写非虚函数。
这与 C++/C# 默认值相反。类函数默认是非虚函数;您可以通过添加“虚拟”修饰符来实现它们。
All functions in Java are virtual by default.
You have to go out of your way to write non-virtual functions by adding the "final" keyword.
This is the opposite of the C++/C# default. Class functions are non-virtual by default; you make them so by adding the "virtual" modifier.
在 Java 中,所有非私有实例方法默认都是虚拟的。
在 C++ 中,私有方法可以是虚拟的。这可以用于非虚拟接口 (NVI) 习惯用法。在 Java 中,您需要保护 NVI 可重写方法。
来自 Java 语言规范 v3:
All non-private instance methods are virtual by default in Java.
In C++, private methods can be virtual. This can be exploited for the non-virtual-interface (NVI) idiom. In Java, you'd need to make the NVI overridable methods protected.
From the Java Language Specification, v3:
是的,您可以用 Java 编写虚拟“函数”。
Yes, you can write virtual "functions" in Java.
在Java中,所有公共(非私有)变量&默认情况下,函数是虚拟。
此外变量&使用关键字final的函数不是虚拟。
In Java, all public (non-private) variables & functions are Virtual by default.
Moreover variables & functions using keyword final are not virtual.