Java Downcasting / Upcasting

时间:2015-08-31 12:24:12

标签: java inheritance

我在以下代码中获取ClassCastEception。 我班扩展了人类。为什么我不能将Me对象转向Person。我无法理解这里的逻辑。请任何人清楚地说清楚。

public class Conv {

    public class Person {
        public void setName(String name) {
            this.name = name;
        }
        public String name = "X";
        public Person(String n) {
            name = n;
        }
        /*
         * many other variables and procedures
         */
    }

    public class Me extends Person {
        /*
         * nothing more in this class
         */
        public Me(String n) {
            super(n);
        }
    }
    public void test() {
        Person p = new Person("Roy");
        Me a = (Me) p;
        System.out.println(a.name);
    }

    public static void main(String[] args) {
        new Conv().test();
    }
}

2 个答案:

答案 0 :(得分:2)

每只猫都是动物。但并非每一只动物都是猫。同样的规则适用于此。您无法将每个Person转为Me。每个Me都是Person的位置。

答案 1 :(得分:0)

您创建的pnew Person,而不是new Me。对于强制转换,它是检查的运行时类型。如果您创建Person p = new Me("Roy"),那么您可以将其转换为Me,因为实际上(在运行时),即使它被声明为Person,它也是Me