Как получить доступ к производной переменной члена класса с помощью объекта интерфейса в Java? - PullRequest
0 голосов
/ 25 марта 2019

Я новый программист Java.

У меня есть следующая иерархия классов:

public interface base

public interface Object1Type extends base

public interface Object2Type extends Object1Type

public class Object3Type implements Object2Type
{ 
      byte[] value;
} 

У меня есть другой класс, где у меня есть объект Object1Type a;

могу ли я получить доступ к значению byte [] члена типа Object3Type, используя этот объект a?

1 Ответ

1 голос
/ 25 марта 2019

Вы можете использовать класс приведения :

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 ранее.

Я рекомендую вам объявить некоторый метод получения водин из интерфейсов (существующих или новых) и реализуйте этот метод в классе:

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();
    }
}
...