个人感觉instanceof其实是面向过程的...
interface People{
}
class Student implements People{
}
class Teacher implements People{
}
/**
* 场景
*/
class Scene{
//下课
classOver(People people){
if(people instanceof Student){
System.out.println("去操场...")
}else if(people instanceof Teacher){
System.out.println("去办公室...")
}
}
}
以上代码非常简单,看起来没有什么问题,表达的意思就是下课了,学生去操场,老师去教室。但是仔细想一想像是有一个人在指挥,不同的对象做不同的响应。注意了,重点不在响应,而是在指挥。这与我们的面向对象好想有点矛盾。
面向对象,强调对象自身具备自己的响应方式。说白了就是我不需要你告诉我怎么做,我知道我该怎么做!!!(其实就是由被动转化为主动的过程,额外说一句,学习其实也是这样,从小学到大学,大部分人都是被动了十几年,很少主动过。进入社会后才意识到,主动学习变得越来越重要)
所以,就下课场景而言,应该由老师,同学自己去响应,而不是有人去指挥。修改如下:
interface People{
classOver();
}
class Student implements People{
classOver(){
System.out.println("去操场...")
}
}
class Teacher implements People{
classOver(){
System.out.println("去办公室...")
}
}
/**
* 场景
*/
class Scene{
//下课
classOver(People people){
/**
* People只是一个引用,其指向的对象(可能是Teacher,可能是Student),会做出响应。
*/
people.classOver();
}
}