黑马程序员技术交流社区
标题:
类型转换的一个问题
[打印本页]
作者:
wq10zj
时间:
2014-2-12 14:21
标题:
类型转换的一个问题
Student stu6=new Student();
if(stu6 instanceof Teacher){
Teacher tea6=(Teacher)stu6;
}
为什么这样写啊 我知道 是判断stu6指向的实例是否是Teacher的子类
这里Teacher extends Student
但是不是很懂
作者:
zzkang0206
时间:
2014-2-12 14:29
你要问的是什么问题呀
作者:
疯子的昨天
时间:
2014-2-12 14:36
这个问题是在告诉编译器我是Teacher类型的。
如果不写编译器会报错。
转换问题我刚开始也弄不清楚,但是在后面张老师的视频中,豁然开朗。
我个人的理解转换问题主要是让编译通过。
也就是让等号两边的类型匹配。
作者:
2424308
时间:
2014-2-12 15:22
把父类强转成子类是为了使用子类的特有方法
作者:
L_t
时间:
2014-2-12 17:01
Student stu6=new Student();//创建一个学生对象
if(stu6 instanceof Teacher){//如果stu6是Teacher类的一个实例。
Teacher tea6=(Teacher)stu6;//把stu6对象强制转换成Teacher,多态
}
作者:
熊冠银
时间:
2014-2-12 17:13
楼主 我想问的是 teacher继承了student 你的if语句还能进去么
作者:
kira
时间:
2014-2-12 17:18
这个代码不是很完整 不过通过
Teacher tea6=(Teacher)stu6; 我可以知道
Teacher肯定是父类 这里就是要将stu6姑且理解为学生6 强转为老师6
if(stu6 instanceof Teacher);//如果学生类是老师类或老师的子类
Student stu6=new Student();//实例化一个学生出来
那么整个的意思就很明显了 先new一个学生 如果学生类是老师类的子类 那么就将学生强转为新的老师
作者:
苏小惠
时间:
2014-2-12 23:06
多态:就是父类引用只用子类的实例对象。当需要用子类的特有功能时,就必须进行强转。这个过程中可能会发生出现:ClassCastException 类型转换异常。因为你Teacher下的子类可能不只一个,如果把不是Student类型的类强转为Student,就是强转出错.比如:动物类下,有猫和狗,你却要把猫强转为狗,就会出错
作者:
李金中
时间:
2014-2-13 10:42
对于JAVA来说,好像对于父类、子类 "指针"定义不严格。这里姑且 把 变量名 说是指针。比如
首先,按你说的,Teacher extends Student,即Sutdent是父类.
那么,如果 Teacher t1 = new Teacher(); new出一个 子类,即 t1指向一个子类对象。
Student s1 = new Student();注意 New出一个父类,即s1 指向一个父类对象。
那么此时 你用s1 instanceof Teacher, 值是false,即编译器能判断出 s1你实际上指的是父类对象,所以结果为false。而且此时,你再用 Teacher t2 = (Teacher) s1,即想通过s1去访问子类的特有方法,是不行的。因为,s1指向的只是一个父类对象。
如果你这么做,Teacher t1 = new Teacher(); Student s1 = t1;那么虽然s1是父类“指针”,但实际指向的是个子类对象。那么此时s1 instanceof Teacher,值为true.即编译器能判断出你丫的表面是父类的,实际指向的是子类对象。所以此时,你再用Teacher t2 = (Teacher)s1,就能调用子类的特有方法了。
总结,实际上通过Instanceof函数,能判断出 你实际上指向的是不是子类对象,从而程序员可以安全的决定是不是去访问子类的特有方法,而不会报错。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2