Java 向上投射-在调用SubClass对象时

Java 向上投射-在调用SubClass对象时,java,casting,Java,Casting,一个简单的向上投射正在进行,子Cals(dog)的对象被其超类(Animal)引用 为什么我不能调用方法“callme2()” 代码:- class Animal { public void callme() { System.out.println("In callme of Animal"); } } class Dog extends Animal { pub

一个简单的向上投射正在进行,子Cals(dog)的对象被其超类(Animal)引用

为什么我不能调用方法“callme2()”

代码:-

class Animal 
    { 
        public void callme()
        {
            System.out.println("In callme of Animal");
        }

    }

    class Dog extends Animal 
    { 
        public void callme()
        {
            System.out.println("In callme of Dog");
        }

        public void callme2()
        {
            System.out.println("In callme2 of Dog");
        }
    }

    class upcasting
    {
        public static void main (String [] args) throws Exception
        {
            Animal a = new Dog();     
    a.callme(); //-In call me of Dog       
    a.callme2(); // - error why ?
     }
    }

因为
a
被分配给超类
Animal

您可以按如下方式调用该方法:

((Dog)a).callme2() 

因为
a
变量是动物类型的参考,而不是
Dog
typea被分配给超类动物,那么它如何能够调用Dog的“callme”方法,因为覆盖了?我说得对吗?@rd4code,你说得对。对
callme
的调用在运行时解决(动态绑定)。参考