java中的c++ OOP指针技巧

C++ OOP pointer trick in java

本文关键字:指针 OOP 中的 c++ java      更新时间:2023-10-16

我是Java新手,但我有相当多的c++经验。我想在Java中做一些只能在c++中使用指针才能完成的事情。因为代码能解释千言万语:

class Parent;
class Kid;
class Parent{
public:
    Parent();
private:
    Kid *kid;
};
class Kid{
public:
    Kid(Parent*);
private:
    Parent *parent;
};
Parent::Parent(){
    //give self
    kid = new Kid(this);
}
Kid::Kid(Parent* parent){
    //kid can now adress the class containing the instance
    parent = parent;
}

那么,这在Java中可能吗?如何实现?

你是正确的,在Java中没有"指针",但在实践中,所有对对象的引用都非常像指针。因此,每当一个变量、字段或参数指向一个对象时,它就"指向"内存中的某个特定对象。

因此,在Java中,您的代码看起来像:
class Parent {
    private Kid kid;
    public Parent() {
        kid = new Kid(this);
    }
}
class Kid {
    private Parent parent;
    public Kid(Parent p) {
        parent = p;
    }
}

这在Java中很容易。所有Object类型的Java变量都是引用。所以Kid可以有一个Parent字段引用Parent对象。

public class Parent{
    private Kid kid;
    public Parent( ) {
        kid = new Kid( this );
    }
}
public class Kid {
    private Parent parent;
    public Kid( Parent p ) {
       parent = p;  // Copies the *reference* to the parent, not the object itself.
    }
}

在java中,你用new创建的每个对象实际上都是一个引用,即一个指针。所以只要用"新"来创造一切,你就会没事的。

public class Parent{
public Parent() { kid = new Kid(this) }
private Kid kid;
}
public class Kid{
public Kid(Parent parent){ this.parent = parent }
private Parent parent;
};