从外部类修改基类中的内容并从派生类访问它

Posted

技术标签:

【中文标题】从外部类修改基类中的内容并从派生类访问它【英文标题】:Modify contents in base class from external class and accessing it from derived class 【发布时间】:2012-07-13 15:40:07 【问题描述】:

我有一个基类和一个派生类以及另一个外部类。 我尝试从外部类更新基类中的值,然后 从派生类访问它。

我的班级结构如下:

class B:

bool flag;

setFlag(bool value)
flag = value;

printFlag()
print flag;


ExternalClass e = new ExternalClass(this);


class External 
B b = null;
External( B b)
this.b = b;

b.setFlag(true);



Class Derived : extends B

printFlag();

虽然我已将标志设置为 true,但 print 方法打印的是 false。 我不知道发生了什么。请帮帮我。

【问题讨论】:

如果您向您展示实际代码(最好是最小但可编译的)将会很有帮助。也许你只有flag = flag;这样的一行。 张贴Short, Self Contained, Correct Example (SSCCE) 证明您的问题将帮助您获得更好的答案。在您的示例中,您没有将任何变量设置为 true。 assylias :我已经编辑了它:在外部类中将标志设置为 true。 “Base”类中的属性对于“Base”类的所有实例是否应该相同?在这种情况下,您可以使用“静态”关键字。 Brainbot :我不想使用静态。任何其他类都可以修改我使用静态的值。 【参考方案1】:

这里有一些你想做的代码:

class Derived extends B
    public Derived()
        super(); 
        // this is the important bit, by calling super() you call the parent classes
        // constructor, which in this case changes the attribute "flag"
        // by using the constructor of the external class on the class
    


class B 
    boolean flag;
    ExternalClass e;

    public B()
        e = new ExternalClass(this);
    

    public void setFlag(boolean value) 
        flag = value;
    

    public void printFlag() 
        System.out.println(flag);
    



class ExternalClass 

    B b = null;

    public ExternalClass(B b) 
        this.b = b;
        b.setFlag (true);
    

【讨论】:

以上是关于从外部类修改基类中的内容并从派生类访问它的主要内容,如果未能解决你的问题,请参考以下文章

CRTP:根据派生类内容启用基类中的方法

访问派生类中的基类成员

C#:基类中的受保护方法;无法使用来自另一个类的派生类对象进行访问[重复]

如何在类内部定义枚举并从外部使用它

虚函数

如何访问不在基类中的派生类中的 STL 类的成员函数? (正文中的详细解释)