本帖最后由 zsmg888 于 2009-09-23 08:06:07 编辑

解决方案 »

  1.   

    楼上的,那为什么我调不带bmw1的方法呢?
      

  2.   

    lz你在开玩笑么,继承机制可是java基础中的基础了啊,先找几个基础的视频看下吧,问出这种问题会很受人鄙视的啊。
      

  3.   

    car t = new bmw();    这就是用父类的对象new子类的实例。方便以后拓展。
    List list = new ArrayList();这个你应该不陌生吧。(util包里的)跟这个原理是一样的。
      

  4.   

    貌似 car t = new bmw(); 等同于 car t = new car(); 还真没这么用过............
      

  5.   

    car t = new bmw(); 这是父类的引用指向子类实例。
    它首先会在父类中寻中方法car1()。
    找不到t.d是因为 t 中没有t变量。
    基础的,要多看出。
      

  6.   

    老调重强父类、子类的关系,你应该这样理解:
    父类是更“泛”的类型,子类是比父类更加“精确”的类型。比如父类是“鸟类”,则“燕子”和“百灵鸟”是“鸟类”的子类。
    如果“食物”是父类,则“米饭”、“面包”、“包子”等是“食物”的子类
    如果“人”是父类,则“男人”、“女人”是“人”的子类,“成年男人”和“成年女人”分别是“男人”和“女人”的子类所以:子类的一个对象必然是其父类的一个对象
    比如,“张三”是一个“男人”(子类的一个对象),那么他一定是一个“人”(父类的对象)。“李四”是个“女人”(子类对象),那么她一定是一个“人”(父类对象)。而很多时候,我们会笼统把“张三”和“李四”当成“人”(父类对象),而忽略他们比较精确的类型(男人还是女人)。
    所以楼主的下列代码就不难理解了:
    car t = new bmw();  
    但是,如果你这样写了,变量 t 就是一个父类类型的变量了,你不能再把它当作子类类型来看。因此你可以用 t 访问 cat 类的方法和属性,但是不能再用它访问 bmw 类的访问和属性。
      

  7.   

    多态是指一个对象同时拥有多种类型,特别是在C++那种可以多继承的语言中。它也不一定非得是父类变量引用子类对象,它可以是接口类型的变量引用实现了这个接口的类的实例。
    就象一个叫“张三”的人,他可以是一个“男人”,如果他考了驾照(实现“司机”接口)的话他就是“司机”,如果他拿到了医师执业资格(实现了“医生”接口)他同时又是一个“医生”。多态不是指方法,而是指类型。java中所有的方法都是虚方法,因此你说的“引用哪个类,就调用哪个类的方法”在java中可以这么说。但在其它面向对象的语言(如C++、C#)中则不一定,它们需要显式的标明方法是 virtural 才会达到这个效果。
      

  8.   


    没看明白。1. 多态性首先是同一接口的多种实现,而不是多种接口,因为我们关心的是接口,而不是实现。
    2. 相对属性而言。
    3. java版我当然只说java了。C++, C#不了解。
      

  9.   


    没看明白。1. 多态性首先是同一接口的多种实现,而不是多种接口,因为我们关心的是接口,而不是实现。
    2. 相对属性而言。
    3. java版我当然只说java了。C++, C#不了解。
      

  10.   


    没看明白。1. 多态性首先是同一接口的多种实现,而不是多种接口,因为我们关心的是接口,而不是实现。
    2. 相对属性而言。
    3. java版我当然只说java了。C++, C#不了解。
      

  11.   

    http://blog.csdn.net/ssyyll/archive/2008/10/28/3170405.aspx
    --!
      

  12.   

    继承于多态:
    1.继承是指子类拥有父类的所有非私有变量和方法,所以子类可以能调用到父类的变量那是理所当然。
    2.多态是指同一个方法(行为),不同子类可以用不同的形式表现出来,及方法的覆盖。因为是覆盖,所以父类于子类中必须同时拥有该方法。只是表现形式不同(代码段不一样)。为什么你调不带bmw1的方法呢?因为你的父类没有此方法。注意你的定义:car t = new bmw();  
    请从等号左右两边看,左边是编译器在编译期间需要确认的,因为你是以父类Car来定义的,所以它认为变量t只能引用Car类中的方法和变量,而右边在编译期间编译器认为bmw也是Car的一类,当然也没问题,只是运行期间实际分配的是BMW的空间。但一切t可以引用的对象必须是声明对象Car中所存在的。如果子类覆盖了父类某一方法,运行时才调用子类的方法,这样才可体现出多态来。顺便说一下,楼主小写类名,还有方法、变量命名等很不规范,应该一开始就养成规范编程的习惯。
      

  13.   

    因为你声明t是car类型,虚拟机不知道你对应的对象是不是bmw类型.
      

  14.   

    car t = new bmw();
    我是这么理解的.
    左边是类型 ,右边是实例.只会调用类型的方法.如题: 类型为car , 实例为 bmw. 所以只调用car的方法.
      

  15.   

    多态的三要素,记住就好了:
    1. 要有继承关系(extends)。
    2. 要有重写方法(overwrite)。
    3. 要有父类引用指向子类对象(Father fat = new Son())。
      

  16.   

    补充一下,多态是JAVA中很重要的东西,如果没搞懂,下面的就很不好搞了。
    多态不一定出现在存在继承关系的类上,还有在接口等中也有。如是扩展到了编译时多态和运行时多态。