如何在java中访问嵌套对象方法

时间:2017-12-24 15:08:44

标签: java

我有几个具有自己的属性和方法的类(比如叶类)。我想创建这些叶类的对象,并使它们成为其他类的成员(比如复合类)。每个复合类都有可变数量的叶对象和一些方法。我应该能够轻松地创建复合类的对象并访问该复合类中的方法。但是如何访问复合类中包含的叶类对象的方法?

interface Leaf{
//methods common to all leaf classes
}

class LeafA implements Leaf{
//attributes
// interface method implementations
//methods unique to this class
}

class LeafB implements Leaf{
//attributes
// interface method implementations
//methods unique to this class
}


class LeafC implements Leaf{
//attributes
// interface method implementations
//methods unique to this class
}

interface Composite{
//common methods
}

class CompositeOne implements Composite{
//attributes 
//list of one or more leaf objects
//methods unique to this class
}

class CompositeTwo implements Composite{
//attributes 
//list of one or more leaf objects
//methods unique to this class
}

我怀疑如何使用复合类的对象访问叶类中的方法。

1 个答案:

答案 0 :(得分:0)

您的Composite界面的用途与Leaf类型的用途不同。这就是为什么在Leaf中处理Composite操作的方法不是一个好主意(问题没有分开)的原因。尽管如此,这在技术上是可行的,尽管这只是一个值得怀疑的设计决定。

您可能拥有的另一个选择是创建一个不同的界面,该界面是关于在复合级别类中执行您要对Leaf实例执行的常见复合级别事务。例如:

interface LeafProcessor {
    void processLeaves();
}

然后,您可以通过当前的CompositeOneCompositeTwo类来实现此界面。例如:

class CompositeOne implements Composite, LeafProcessor{
    //attributes 
    Leaf leafA = new LeafA();
    //methods unique to this class

    @Override
    public void processLeaves() {
        this.leafA.doSomething();
    }
}

请注意,此类实现了2个接口。当然,这个事实可能需要CompositeOne类的新名称。

您必须决定您决定实施此项目的方式(例如只有CompositeLeafAProcessor等实例的LeafA。)