java - java和c++中的实例变量

标签 java c++

据我了解,在 java 中所有变量都是引用。

下一段代码:

class Parent { 
    public int x = 12; 
} 
class Child extend Parent { 
public int x = 42; 
} 
Parent p = new Parent(); 
System.out.println(p.x); 
12 
Child c = new Child(); 
System.out.println(c.x); 
42 
p = c; // be careful here! 
System.out.println(p.x); 
12

我认为这里没有切片,因为我们谈论的是引用。出于这个原因,我不明白为什么要打印 "12"p现在指向c的区域,c.x为42。

同样的事情发生在下一个 C++ 代码中:

class Parent { 
  public:
    void example () { cout << "Parent" << endl; } 
}; 
class Child : public Parent { 
  public: 
    void example () { cout << "Child" << endl; } 
};

Parent * p = new Parent(); 
p->example() 
Parent 

Child * c = new Child(); 
c->example() 
Child 

p = c; // be careful here! 
p->example() 
Parent

最佳答案

您是在隐藏成员,而不是覆盖成员。对于 Java 示例,您不能覆盖字段。你需要使用一个函数。对于 C++ 示例,您在 Parent 中的函数必须是虚拟的才能被 Child 覆盖。否则,您只需隐藏该功能即可。

C++:

class Parent { 
  public:
    virtual void example () { cout << "Parent" << endl; } 
}; 
class Child : public Parent { 
  public: 
    void example () { cout << "Child" << endl; } 
};

关于java - java和c++中的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6386508/

相关文章:

java - SimpleMappingExceptionResolver 中的 Spring doResolveException 未被调用

java - spring 如何在运行时获取接口(interface)的实现

java - Java 中的字符串终止符

c++ - 添加分钟和秒。以小时显示

java - 递归地打印带有适当逗号的数字

java - Selenium Webdriver Java : Unable to perform click operation by Actions in Chrome

java - 如何使用从一个Android应用程序生成的.so文件,并在另一个应用程序中使用它?

c++ - 了解特殊类型的访问 C++/C 数组

c++ - 当类层次结构中只有一个类时,避免在每次函数调用时读取 V 表的开销

c++ - 代码的作用是什么以及如何在我的自定义项目中使用它?