访问当前对象的兄弟方法

时间:2015-02-18 08:22:46

标签: java class methods siblings

我有两个(兄弟)类,都是同一个父类的子类。 Parent包含两个兄弟共享的所有方法,兄弟类只包含未共享且具有不同实现的方法。

实施例,

class Parent() {
}
class Sibling1 extends Parent() {
    byte[] sharedSecret;
    int sharedSecretLength;
    public generateKey() {
        sharedSecret = keyAgree.generateSecret());
        sharedSecretLength = sharedSecret.length);
    }
}
class Sibling2 extends Parent() {
    byte[] sharedSecret2;
    int sharedSecretLength2;
    public generateKey() {
        sharedSecret2 = new byte[sharedSecretLength];
        sharedSecretLength2 = keyAgree.generateSecret(sharedSecret2, 0);
    }
    public int getSharedSecretLength() {
        return sharedSecretLength();
    }
}

如您所见,两者都包含相同的方法,但实现方式不同。我的问题是,如果创建了两个类(sibling1和sibling2)的对象并且成功生成obj2 generateKey取决于obj1的sharedSecretLength。例如,

Parent obj1 = new Sibling1();
Parent obj2 = new Sibling2();

obj1在不同的类(我创建的服务器类)和不同类(我创建的客户端)中的obj2中实例化。如果obj1调用它自己的generateKey - > ((Sibling1)obj1).generateKey(),如何在同一个对象(obj1)上使用getSharedSecretLength将所需信息转发到obj2的generateKey以成功生成?我尝试了类似的东西(在obj2的generateKey()中):

sharedSecret2 = new byte[Sibling1.sharedSecretLength];

......它没有用。在Sibling2类中创建Sibling1 obj1,然后以这种方式调用它,例如,

Sibling1 xx = null;
.
.
sharedSecret2 = new byte[((Sibling1)xx).sharedSecretLength];

不起作用,因为xx是新对象。我正在尝试使用旧的obj,它生成了它的密钥并包含不是0的sharedSecretLength

如果obj1和obj2都是在同一个类中创建的,那就更容易了。

请帮助我指出正确的方向

2 个答案:

答案 0 :(得分:0)

而不是

((Sibling1)xx).sharedSecretLength

称之为

((Sibling1)xx).getSharedSecretLength()

在java中,如果它不接受参数并且它不按字段名称工作,则传递空括号,您必须提供与您定义的相同的方法名称。

答案 1 :(得分:0)

听起来你应该这样重构,以便Sibling2上的generateKey方法具有它所需的参数:

Sibling1 obj1 = new Sibling1();
obj1.generateKey();
Siblibg2 obj2 = new Sibling2();
obj2.generateKey(obj1.getSharedSecretLength());