三个类:
abstract class A;
abstract class B extends A;
class C extends B;A a1 = new C ();
为什么 a1 不能调用 class b 里的方法呢?只能调用 A里的方法,不甚明白。

解决方案 »

  1.   

    .............
    为什么A能调用B里的方法?
    比如
    abstract class 生物 {
       abstract 新城代谢();
    }
    abstract class 动物 extends 生物{
       abstract 跑();
    }class 人 {
       新城代谢(){}
       跑(){};
    }生物 x = new 人();
    x.跑(); ///这怎么可能?//除非downcast
    (动物)x.跑();
    //或者
    (人)x.跑();
      

  2.   

    但是 class 人是 extends 动物了的呀?
      

  3.   

    这是典型的父类引用指向子类对象  因为用class A的引用指向他的子类  但是class A只能看到他已经有的方法,不能看到它子类新增加的方法,所以不能调用
      

  4.   

    楼主具体是一种什么情况?abstract class A {
        public void deal(){
            System.out.println("oh A");
        }
    }abstract class B extends A {
        public void deal(){
            System.out.println("oh B");
        }
    }public class Test extends B {
        public static void main(String[] args) {
            A   a1   =   new Test(); 
            a1.deal();
        }
    }result:
    oh B
      

  5.   

    A   a1   =   new   C   (); 我再提示一遍,4楼的
    在编译的时候,A决定了你能调用的方法
    在运行时,调用的方法会是C里面的方法,如果Override了的话。这就是编译期和运行期的区别!