1

ツリークラスがあります。

class MyObject{
    public void DoSomething()
    {
        here I need to call method add from class base.
    }
}

class base
{
    protected final void add(){}      
}

class extended extends base {
    private MyObject pObject = new MyObject();
    ...
    {
        pObject.DoSomething();
    }
}

クラス拡張を拡張するバリエーションごとにクラスを作成することもできますが、使用する必要のあるタイプは、クラス拡張がすでに開始された後でのみ使用可能になります。

MyObject内部メソッドbase.add()から呼び出すにはどうすればよいですか?

4

2 に答える 2

0

あなたはいくつかの方法でそれを行うことができます:

  • extendedクラスでクラスの参照を持っていますMyObjectMyObjectクラスで変数をインスタンス化するときはextended、の参照を渡しますextended

このようなもの:

class MyObject{
    private base baseObj;

    public MyObject(base baseObj){
        this.baseObj = baseObj;
    }

    public void DoSomething()
    {
        //here I need to call method add from class base.
            //use baseObj to call the methods
    }
}


class base
{
    protected final void add(){}      
}


class extended extends base {
    private MyObject pObject;
    ...

    public extended(){
        pObject = new MyObject(this);
    }

    {
        pObject.DoSomething();
    }
}
  • baseクラスでメソッドを宣言しますstaticbaseこのようにして、クラスのインスタンスを必要とせずにメソッドを呼び出すことができます。

このようなもの:

class MyObject{

    public void DoSomething()
    {
        //here I need to call method add from class base.
        //call like this
        base.add();
    }
}


class base
{
    protected static final void add(){}      
}


class extended extends base {
    private MyObject pObject;
    ...

    public extended(){
        pObject = new MyObject(this);
    }

    {
        pObject.DoSomething();
    }
}

もう1つ:これはトピックから外れていますが、Javaの命名規則について読むことをお勧めします。クラス名を小文字で始めることは、命名規則にはないものです。

于 2012-09-19T04:44:24.597 に答える
0

このようなダミーコード:

class MyObject{
    public void DoSomething(Base base)
    {
        base.add();
    }
}

class extended extends base {
    private MyObject pObject = new MyObject();
    ...
    {
        pObject.DoSomething(this);
    }
}
于 2012-09-19T04:49:52.040 に答える