如何通过java中的接口对象访问派生的class成员变量?
How to access a derived class member variable by an interface object in java?
我是一名新 java 程序员。
我有以下 classes 层次结构:
public interface base
public interface Object1Type extends base
public interface Object2Type extends Object1Type
public class Object3Type implements Object2Type
{
byte[] value;
}
我有另一个 class,其中我有一个 Object1Type a 的对象;
我可以使用这个对象 a 访问 Object3Type 类型的 byte[] 值成员吗?
您可以使用 class cast:
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 并在 class:
中实现此方法
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();
}
}
我是一名新 java 程序员。
我有以下 classes 层次结构:
public interface base
public interface Object1Type extends base
public interface Object2Type extends Object1Type
public class Object3Type implements Object2Type
{
byte[] value;
}
我有另一个 class,其中我有一个 Object1Type a 的对象;
我可以使用这个对象 a 访问 Object3Type 类型的 byte[] 值成员吗?
您可以使用 class cast:
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 并在 class:
中实现此方法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();
}
}