簡體   English   中英

Java下傳/上傳

[英]Java Downcasting/Upcasting

我在以下代碼中獲得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();
    }
}

每只貓都是動物。 但是,並非每個動物都是貓。 同樣的規則在這里適用。 你不能把每個Person轉向Me 每個Me都是一個Person

您正在將p創建為new Person ,而不是new Me 對於轉換,將檢查運行時類型。 如果創建Person p = new Me("Roy") ,則可以將其MeMe因為實際上(在運行時),即使它被聲明為Person ,它也是Me

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM