A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wq10zj 中级黑马   /  2014-2-12 14:21  /  985 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Student stu6=new Student();
       if(stu6 instanceof Teacher){
                         Teacher tea6=(Teacher)stu6;
}
为什么这样写啊  我知道 是判断stu6指向的实例是否是Teacher的子类
这里Teacher extends Student
但是不是很懂



评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
你要问的是什么问题呀
回复 使用道具 举报
这个问题是在告诉编译器我是Teacher类型的。
如果不写编译器会报错。
转换问题我刚开始也弄不清楚,但是在后面张老师的视频中,豁然开朗。
我个人的理解转换问题主要是让编译通过。
也就是让等号两边的类型匹配。
回复 使用道具 举报
把父类强转成子类是为了使用子类的特有方法
回复 使用道具 举报
Student stu6=new Student();//创建一个学生对象
        if(stu6 instanceof Teacher){//如果stu6是Teacher类的一个实例。
                          Teacher tea6=(Teacher)stu6;//把stu6对象强制转换成Teacher,多态
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼主 我想问的是 teacher继承了student 你的if语句还能进去么
回复 使用道具 举报
kira 中级黑马 2014-2-12 17:18:12
7#
这个代码不是很完整 不过通过
Teacher tea6=(Teacher)stu6; 我可以知道
Teacher肯定是父类 这里就是要将stu6姑且理解为学生6 强转为老师6
if(stu6 instanceof Teacher);//如果学生类是老师类或老师的子类

Student stu6=new Student();//实例化一个学生出来
那么整个的意思就很明显了 先new一个学生 如果学生类是老师类的子类 那么就将学生强转为新的老师

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
多态:就是父类引用只用子类的实例对象。当需要用子类的特有功能时,就必须进行强转。这个过程中可能会发生出现:ClassCastException 类型转换异常。因为你Teacher下的子类可能不只一个,如果把不是Student类型的类强转为Student,就是强转出错.比如:动物类下,有猫和狗,你却要把猫强转为狗,就会出错

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
对于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函数,能判断出 你实际上指向的是不是子类对象,从而程序员可以安全的决定是不是去访问子类的特有方法,而不会报错。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马