使用来自.getClass()的返回值转换Java

时间:2018-01-22 09:37:16

标签: java

我想创建一个演员如下

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我也算明确)实际上有效?

2 个答案:

答案 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