为了账号安全,请及时绑定邮箱和手机立即绑定

如何在java中通过接口对象访问派生的类成员变量?

如何在java中通过接口对象访问派生的类成员变量?

qq_花开花谢_0 2022-09-01 18:07:04
我是一名新的Java程序员。我有以下类的层次结构:public interface basepublic interface Object1Type extends basepublic interface Object2Type extends Object1Typepublic class Object3Type implements Object2Type{       byte[] value;} 我有另一个类,我有一个Object1Type a的对象;我可以使用此对象a访问Object3Type类型的byte[]值成员吗?
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

您可以使用类强制转换:


public static void main(String args[]) {

    Object1Type a = new Object3Type();


    if (a instanceof Object3Type) {

        Object3Type b = (Object3Type) a;

        byte[] bytes = b.value;

    }

}

但这是危险的,不推荐的做法。演员正确性的责任在于程序员。请参阅示例:


class Object3Type implements Object2Type {

    byte[] value;

}


class Object4Type implements Object2Type {

    byte[] value;

}


class DemoApplication {


    public static void main(String args[]) {

        Object1Type a = new Object3Type();


        Object3Type b = (Object3Type) a; // Compiles and works without exceptions

        Object4Type c = (Object4Type) a; // java.lang.ClassCastException: Object3Type cannot be cast to Object4Type

    }

}

如果这样做,请至少使用前面的 instanceof 运算符检查对象。


我建议您在其中一个接口(现有或新)中声明一些 getter,并在类中实现此方法:


interface Object1Type extends Base {

    byte[] getValue();

}


interface Object2Type extends Object1Type {}


class Object3Type implements Object2Type {

    byte[] value;


    public byte[] getValue() {

        return value;

    }

}


class DemoApplication {


    public static void main(String args[]) {

        Object1Type a = new Object3Type();

        byte[] bytes = a.getValue();

    }

}


查看完整回答
反对 回复 2022-09-01
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信