-1

論文を読んだときに、「含むクラスのサブクラス」という表現に出くわしました。それcontaining classはJavaではどういう意味ですか?これは論文からの抜粋です。

Primarily, this entailed three things: (i) studying the implementation of the entity, as well as its usage, to reason about the intent behind the functionality; (ii) performing static dependency analysis on the entity, and any other types, methods, or fields referenced by it, including constants; and (iii) examining the inheritance hierarchy and subclasses of the containing class. This approach took considerable time and effort to apply.

4

2 に答える 2

3

この例には、包含クラスのサブクラスがあります。

class Parent {
    class Child {
    }
}

class ParentSubclass extends Parent {
    void whatever() {
        new Child(); // Creates an instance of Parent.Child
    }
}

ParentSubclass包含クラスのサブクラスです。非「内部」クラスをインスタンス化するには、包含(「外部」)クラスが必要なため、外部(またはそのサブクラス)は機能しないことに注意してください。ChildParentnew Child()static

doSomethingメソッドをに追加しParent、 で呼び出して でChildオーバーライドすると、事態は少しおかしくなりますParentSubclass

class Parent {
    void doSomething() {
        System.out.println("Not doing anything");
    }

    class Child {
        void whatever() {
            doSomething(); // actually: Parent.this.doSomething()
        }
    }
}

class ParentSubclass extends Parent {
    void doSomething() {
        System.out.println("I'm just slacking.");
    }

    void whatever() {
        Child a = new Child(); // Creates an instance of Parent.Child
        a.whatever(); // will print "I'm just slacking".
    }
}

このような状況では、静的コード分析が非常に難しい問題になります。

于 2012-12-20T18:10:42.350 に答える
2

私は論文にアクセスできないので、これが私の最善の推測です。Java では、クラスは複数の方法で相互に関連付けることができます。相互に継承するだけでなく、クラスを相互にネストすることもできます。

ネストされているクラスから継承するクラスの例を次に示します。

public class Outer {
    public void doSomething() {
        // ...does something
    }
    private static class Inner extends Outer {
        public void doSomething() {
            // ...does something else
        }
    }
}

上記の例では、 は、その包含クラスとして機能Innerする から継承します。Outer

于 2012-12-20T18:12:53.557 に答える