有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java通过使用来自的返回值进行强制转换。getClass()

我想创建一个演员阵容,如下所示

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(我也显式地计算Dog的instanceof Dog),这实际上是可行的


共 (2) 个答案

  1. # 1 楼答案

    您可以简单地将对象强制转换为Dog并调用其print方法

    如果要使用类元数据,则不能直接调用print,因为您在运行时获取类,因此在编译时编译器不知道对象d的实际类。因此,您必须在运行时使用reflection来调用该方法。这种调用方法的方式比在编译时调用慢(即,正常方式)

        Object d = new Dog();
        ((Dog) d).print();
        d.getClass().getMethod("print").invoke(d);
    
  2. # 2 楼答案

    你不需要把你的东西扔给狗,把它扔给动物就足够了:

        public static void main(String args[]){
            Object d = new Dog();
            System.out.println(d.getClass()); // "Dog"
            ((Animal) d).print();
    }
    

    将打印

    Dog
    Dog