问基类能不能调用基类没有定义 但是派生类定义的方法 !
比如这Food类和 Fruit类后者是前者的继承 
后者有个grow方法是前者没有的 然后我这么做
Food myFood;
myFood= new Fruit();
myFood.grow();
这样可以吗 %要是不可以的话怎么才能调用我想调用的派生类的grow方法%;另外在实际的程序中 抽象和接口我们一般都都怎么用呢 两者似乎没有什么太大的区别。

解决方案 »

  1.   

    不能调用吧,常理都讲的通啊。
    比如food是父类,fruit是子类。子类有的属性,父类未必有。
      

  2.   


     不能直接调用,有两种办法可以:
     1.在父类中声明一个grow()
     2. ((Fruit)myFood).grow();
      

  3.   

    myFood= new Fruit();在编译时就过不了啊
      

  4.   

    没看清题目,你这样写是可以的Food myFood;
    myFood= new Fruit();
    myFood.grow();
      

  5.   

    下面这个算不算“在基类里调用基类没有定义的方法”?   ^_^(其实,虽然在基类里没有定义,但至少基类知道自己是通过哪个派生类来实例化的,然后按着它造型就是了。如果连这个也不知道,那就用反射!)package test;public class Test7 {
        public static void main(String[] args) {
            Base o = new Derived();
            o.doSomething();
        }
    }class Base {
        public void doSomething() {
            System.out.println("hi - Base");
            Derived o = (Derived)this;
            o.doOthers();
        }
    }class Derived extends Base {
        public void doOthers() {
            System.out.println("hi - Derived");
        }
    }
      

  6.   

    补充一点,我认为,无论“造型”也好,“反射”也罢,都不是“正宗”的办法,原因是,就不应该在基类里假设派生类会长成什么样子。
    “正宗”的做法是,在基类里定义 abstract 方法,由派生类实现。