解决方案 »
- 线程的问题
- 雪天,荆棘丛中,跪求,帮帮忙。
- 如何在TextField的前两位只输入输入1-50的数字
- 怎么用java实现修改unix下一些用户的口令?
- swing中这种效果是怎么做出来的
- 哪里有 2003年度Javaworld编辑奖最佳Java书籍的下载,例如Patterns of Enterprise Application Architecture
- 请问能在哪下载java类库的书
- 超级菜鸟的问题:关于TomCat的配置!!!请大家帮助大家!!
- 如何判断一个字符是中文字符?
- 用jdbc 实现ms sql server7 移植到 oracle8i
- 100分求解Interface类型引用的问题
- 征集人民币大小写转换思路(要求在万亿级别)
List list = new ArrayList();这个你应该不陌生吧。(util包里的)跟这个原理是一样的。
它首先会在父类中寻中方法car1()。
找不到t.d是因为 t 中没有t变量。
基础的,要多看出。
父类是更“泛”的类型,子类是比父类更加“精确”的类型。比如父类是“鸟类”,则“燕子”和“百灵鸟”是“鸟类”的子类。
如果“食物”是父类,则“米饭”、“面包”、“包子”等是“食物”的子类
如果“人”是父类,则“男人”、“女人”是“人”的子类,“成年男人”和“成年女人”分别是“男人”和“女人”的子类所以:子类的一个对象必然是其父类的一个对象
比如,“张三”是一个“男人”(子类的一个对象),那么他一定是一个“人”(父类的对象)。“李四”是个“女人”(子类对象),那么她一定是一个“人”(父类对象)。而很多时候,我们会笼统把“张三”和“李四”当成“人”(父类对象),而忽略他们比较精确的类型(男人还是女人)。
所以楼主的下列代码就不难理解了:
car t = new bmw();
但是,如果你这样写了,变量 t 就是一个父类类型的变量了,你不能再把它当作子类类型来看。因此你可以用 t 访问 cat 类的方法和属性,但是不能再用它访问 bmw 类的访问和属性。
就象一个叫“张三”的人,他可以是一个“男人”,如果他考了驾照(实现“司机”接口)的话他就是“司机”,如果他拿到了医师执业资格(实现了“医生”接口)他同时又是一个“医生”。多态不是指方法,而是指类型。java中所有的方法都是虚方法,因此你说的“引用哪个类,就调用哪个类的方法”在java中可以这么说。但在其它面向对象的语言(如C++、C#)中则不一定,它们需要显式的标明方法是 virtural 才会达到这个效果。
没看明白。1. 多态性首先是同一接口的多种实现,而不是多种接口,因为我们关心的是接口,而不是实现。
2. 相对属性而言。
3. java版我当然只说java了。C++, C#不了解。
没看明白。1. 多态性首先是同一接口的多种实现,而不是多种接口,因为我们关心的是接口,而不是实现。
2. 相对属性而言。
3. java版我当然只说java了。C++, C#不了解。
没看明白。1. 多态性首先是同一接口的多种实现,而不是多种接口,因为我们关心的是接口,而不是实现。
2. 相对属性而言。
3. java版我当然只说java了。C++, C#不了解。
--!
1.继承是指子类拥有父类的所有非私有变量和方法,所以子类可以能调用到父类的变量那是理所当然。
2.多态是指同一个方法(行为),不同子类可以用不同的形式表现出来,及方法的覆盖。因为是覆盖,所以父类于子类中必须同时拥有该方法。只是表现形式不同(代码段不一样)。为什么你调不带bmw1的方法呢?因为你的父类没有此方法。注意你的定义:car t = new bmw();
请从等号左右两边看,左边是编译器在编译期间需要确认的,因为你是以父类Car来定义的,所以它认为变量t只能引用Car类中的方法和变量,而右边在编译期间编译器认为bmw也是Car的一类,当然也没问题,只是运行期间实际分配的是BMW的空间。但一切t可以引用的对象必须是声明对象Car中所存在的。如果子类覆盖了父类某一方法,运行时才调用子类的方法,这样才可体现出多态来。顺便说一下,楼主小写类名,还有方法、变量命名等很不规范,应该一开始就养成规范编程的习惯。
我是这么理解的.
左边是类型 ,右边是实例.只会调用类型的方法.如题: 类型为car , 实例为 bmw. 所以只调用car的方法.
1. 要有继承关系(extends)。
2. 要有重写方法(overwrite)。
3. 要有父类引用指向子类对象(Father fat = new Son())。
多态不一定出现在存在继承关系的类上,还有在接口等中也有。如是扩展到了编译时多态和运行时多态。