黑马程序员技术交流社区

标题: 类型转换的一个问题 [打印本页]

作者: 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