黑马程序员技术交流社区
标题:
多态的问题【已解决】
[打印本页]
作者:
刘佳
时间:
2012-8-8 23:02
标题:
多态的问题【已解决】
本帖最后由 刘佳 于 2012-8-9 19:00 编辑
什么时候向上转型,什么时候向下转型?用它们有什么意义?
作者:
yb61776662
时间:
2012-8-8 23:07
(1)同一个对象,在不同时刻的多种运行状态。
(2)举例:
动物,狗 狗是狗,狗是动物。
水(气体,液态,固定)
(3)前提
A:存在着继承或者实现关系
B:有方法的重写
C:父类(接口)引用指向子类(实现)对象
(4)不同形式形式模拟多态
A:普通类
B:抽象类
C:接口
(5)多态中对象调用成员的特点
Fu f = new Zi();
A:成员变量
编译看左边,运行看左边
B:成员方法
编译看左边,运行看右边
C:静态方法
编译看左边,运行看左边
(6)多态的思想
指挥同一批对象做事情。
举例:带兵打仗,下课等。
(7)向上转型和向下转型
Animal a = new Dog(); //向上转型
//使用Dog中特有的方法
Dog d = (Dog) a; //向下转型
//注意:不能转换成不同类型的
Cat c = (Cat)a;
举例:
孔子爹:教课(java)
孔子:教课(论语),玩游戏()
//多态
孔子爹 k爹 = new 孔子(); //孔子就穿上他爹的衣服,装爹 向上转型
k爹.教课(); //论语
//k爹.玩游戏();
孔子 k = (孔子) k爹; //脱下衣服,穿上自己衣服。向下转型
k.玩游戏();
作者:
于启会
时间:
2012-8-8 23:13
向上转型就是装箱,向下转型就是拆箱
在java中,数据类型总共可分为两大种,基本数据类型(值类型)和类类型(引用数据类型)。基本类型的数据不是对象,不能作为对象调用其toString()、hashCode()、getClass()、equals()等等方法。
所以在java中,针对8种基本数据类型,提供了针对每个基本数据类型的包装类。如下:
INDEX 基本数据类型 包装类
1 int Integer
2 char Character
3 float Float
4 double Double
5 byte Byte
6 short Short
7 long Long
8 boolean Boolean
所谓装箱,就是把基本类型用它们相对应的引用类型包起来,使它们可以具有对象的特质,如我们可以把int型包装成Integer类的对象,或者把double包装成Double,等等。
所谓拆箱,就是跟装箱的方向相反,将Integer及Double这样的引用类型的对象重新简化为值类型的数据。
public class IntegerDemo02
{
public static void main (String []agrs)
{
int i=10
Integer j=i;
int k=j;
System.out.println(++k);
}
}; //output:11
包装类的另外一个比较有用的是可以将String 字符串类型转换为相应的基本数据类型。下面以将String转为int为例:
public class IntegerDemo04
{
public static void main (String[] args)
{
String str="1500";
try
{
int i=Integer.parseInt(str);
System.out.println(++i);
}
catch (Exception e)
{
e.printStackTrace(); //打印异常信息
}
}
};// output: 1501
作者:
焦晨光
时间:
2012-8-8 23:37
父类:动物
子类:狼
动物=狼 向上转型
狼=动物 向下转型
动物=狗 ok
狼=狗 不ok
一个只能治狼病的诊所 你带着狗来看病 肯定不可以 所以这里就要用到向下转型来判断
这就是所谓的向下转型
动物都可以奔跑 所以动物类里有一个奔跑的方法
动物=狼
动物=狗
动物=猪
动物=奥特曼
动物=小日本
动物这个类里可以接受n多动物通过向上转型来使用奔跑方法
或者继承父类改写奔跑方法
各种小动物改写完奔跑方法后 要接受传进来的动物
假如把 动物=小日本 传进了 狗改写父类的奔跑方法里了
小日本会奔跑吗 显然不会!
所以 动物 狗 = (狗) 小日本 不ok
向下转型失败
作者:
潘星
时间:
2012-8-9 02:44
焦晨光 发表于 2012-8-8 23:37
父类:动物
子类:狼
动物=狼 向上转型
太有才了:D
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2