我想创建一个演员如下
class Animal {}
class Dog extends Animal { //Dog inherits Animal
public void print() {
System.out.println("Dog");
}
public static void main(String args[]){
Object d = new Dog();
System.out.println(d.getClass()); // "Dog"
((d.getClass()) d).print();
/**
* 4.253.25/Dog1.java:8: error: ')' expected
* ((d.getClass()) d).print();
* ^
* 4.253.25/Dog1.java:8: error: not a statement
* ((d.getClass()) d).print();
* ^
* 4.253.25/Dog1.java:8: error: illegal start of expression
* ((d.getClass()) d).print();
* ^
* 4.253.25/Dog1.java:8: error: ';' expected
* ((d.getClass()) d).print();
* ^
* 4 errors
**/
}
}
有没有一种方法可以做到这一点,而没有明确说将它投射到Dog(instanceof Dog我也算明确)实际上有效?
答案 0 :(得分:1)
您只需将对象转换为Dog
并调用其print
方法。
如果你想使用类元数据,你不能直接调用print,因为你是在运行时获取类,所以在编译时编译器不知道你的对象是什么实际类{{ 1}}是。因此,您必须使用reflection在运行时调用该方法。这种调用方法的方式比在编译时(即正常方式)这样做慢。
d
答案 1 :(得分:0)
您不需要将对象转换为Dog,将其转换为Animal就足够了:
public static void main(String args[]){
Object d = new Dog();
System.out.println(d.getClass()); // "Dog"
((Animal) d).print();
}
将打印
Dog
Dog