对于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函数,能判断出 你实际上指向的是不是子类对象,从而程序员可以安全的决定是不是去访问子类的特有方法,而不会报错。 |