Manager类继承Employee类
若是定义
Employee e= new Manager();
e是Employee 类还是Manager类
为什么 System.out.println(e instanceof Manager);结果是true?
若是定义
Employee e= new Manager();
e是Employee 类还是Manager类
为什么 System.out.println(e instanceof Manager);结果是true?
(Manager)e
你具体说的例子,在声明的时候,e是Employee,但是在内存当中实际上e由于是new Manager()因此实际上是Manager类,因此instanceof是可以判定结果为true,也可以用强制类型转换为Manager类不会有什么错误。这样做与Manager e=new Manager()的区别在哪里呢?是e不进行强制类型转换,只能用Manager的类声明的方法,但是如果子类Manager覆盖了父类方法,实际上执行的是子类覆盖之后的方法。
e 的本质其实是Manager
new Manager() 当然是 Manager类了
当我们在说
动物 e = new 人(); 就相当于:
1. 人 a = new 人(); 创建了一个 人;
2. 然后 动物 e = a; 我们在沟通时只关注它是一个“动物 “而忽略不相关的具体的信息,这个过程叫”抽象“。到了晚上要住下,需要识别你是什么身份,这时,是”人“就住室内,动物就住外面小棚子里。这时因为要区分人还是动物,就要 e instanceof 人来判断,这时需要了解具体的信息而不是原来泛称的“动物”共性。动物 c = new 动物(); 人 d = (人) c; 是不成立的,因为,动物本身不是人,一个东西本来不是人的话是不可能 (人) new 动物() 的。一个对象在 new 出来时是什么就是什么。把人赋值给动物只是一个“抽象”的过程,它并不改变对象的本质特性而只是暂时地把它的特殊的性质隐藏了,在 cast down 的时候还是可以还原的。
(Manager)e