两件事:
1. Java中的嵌套类,如C ++中的组合?
2.C ++中的虚函数相当于Java中的函数覆盖吗?
答案 0 :(得分:2)
Java中的嵌套类有两种形式:内部类和静态嵌套类。
C ++中没有内部类的直接等价物。如果你想要它,你需要手动完成,给“内部类”一个指针返回外部类(在每个方法中作为参数,或存储在“内部类”中)。
Java中的静态嵌套类类似于在C ++中声明类中的类。
C ++中的组合是指组合类的实际值存储在另一个类中。 Java中没有类值类型,所有Java类类型都是引用,因此Java中没有直接的等价物。 Java“composition”将存储对“子对象”的引用:这可以通过引用,指针或智能指针在C ++中完成。
C ++ virtual
方法类似于Java中的非final
非static
方法。 C ++非虚拟非静态方法在Java中没有真正的等价物(最终方法大致相同,但更类似于C ++中的virtual
final
方法。您可以在某种程度上覆盖C ++中的虚函数,其方式与在Java中覆盖非静态非最终函数的方式类似:例如,它们都支持协变返回类型(但它们可能不同意协变的内容)。一些细节将会有所不同。
static
方法类似。
(我是一名C ++程序员,我对Java的了解几乎完全是对比的问题:相信我对C ++的陈述远不止我对Java的陈述。)
答案 1 :(得分:1)
final
使其成为非虚拟方法)。在C ++中,您必须明确标记它们virtual
才能覆盖它们。答案 2 :(得分:1)
组合是一个设计术语,嵌套类是一种语言机制(可用于实现组合)。正如Thomas Matthews在评论中提到的,两种语言都支持嵌套类。
默认情况下,Java中的非静态方法表现为polimorphically,即与C ++不同,您不使用virtual
关键字使方法成为虚拟方法。关于虚拟方法如何在幕后工作,这个问题有一些很好的答案:Java - Virtual Methods
答案 3 :(得分:0)
1。)Java和C ++支持嵌套类。毕竟,在java中,一个类可以在另一个类的成员数据中拥有一个实例。
Composition只是为其他类提供了一个包装类。
喜欢维基百科的这个例子
class Pond{
private:
std::vector<ducks*> myDucks;
}
2.。)虚函数是在C ++中用于继承要定义的父类的类在基类中定义的函数。 virtual
需要在继承父类的类中重载函数。
答案 4 :(得分:0)
广告。 2. C ++中的方法/虚函数是:
从上面可以看出,Java的类似方法是在接口中带有修饰符“ default”的方法,该方法可从版本8开始使用。
示例:
public interface Foo {
default String bar() {
return "Foo.bar";
}
}