Manager类继承Employee类
若是定义
Employee e= new Manager();
e是Employee 类还是Manager类
为什么  System.out.println(e instanceof Manager);结果是true?

解决方案 »

  1.   

    但是e 不能调用Manager的单独方法?
      

  2.   

    你可以强制转换下
    (Manager)e
      

  3.   

    这里涉及到的Java基础知识就是Java的自动向下绑定
    你具体说的例子,在声明的时候,e是Employee,但是在内存当中实际上e由于是new Manager()因此实际上是Manager类,因此instanceof是可以判定结果为true,也可以用强制类型转换为Manager类不会有什么错误。这样做与Manager e=new Manager()的区别在哪里呢?是e不进行强制类型转换,只能用Manager的类声明的方法,但是如果子类Manager覆盖了父类方法,实际上执行的是子类覆盖之后的方法。
      

  4.   

    这个是由子类的构造方法构造一个父类的引用(即父类引用指向子类对象),Employee e= new Manager();e有几个特点,1: e 可以调用父类定义的所有属性和方法,而对于子类中定义而父类中没有的方法则不行。2: 父类中的方法,只有在父类中定义且没有在子类中重写的情况下才可以被 e 调用,如果子类重写了该方法,则调用的是子类的方法。 
    e 的本质其实是Manager
      

  5.   

    父类的引用可以指向子类对象,运行程序时,new的什么子类,父类的对象就是谁, A instanceof B 是判断A对象是不是B类型及其子类或型子接口类型. 
    new Manager() 当然是 Manager类了
      

  6.   

    这是多态的特性,父类可以直接new一个其子类的实例。一个引用类型变量如果声明为父类的类型,但实际引用的是子类对象,那么该变量就不能再访问子类中添加的属性和方法
      

  7.   

    面向对象的概念问题,向上转型叫“抽象”,让它只展示给外界父类的共性;向下转型则反过来,把对象本来的性质再次展示给外界。一个对象的本质不会因为转换而消失,只是暂时隐藏了,编译器在生成代码时对于隐藏的特性是不能直接使用的,我们使用前需要把它还原出来。这里抽象类型的 Cast Down 和基本类型的 Cast 则不同,抽象类型的转换本质上什么信息都没丢失,必要时是可以还原的,但基本类型的 cast 则不同,比如:float/double/int 在内存里面都是二进制的表示,但 float/double 的每个位的布局是分成指数符号位,指数尾数,数字本身的表示三个部分,那么把 float/double 转换成 int (比如,int a  = (int) 3.5L) 时则因为内存的布局变化成了简单的二进制表示,这时可能发生信息丢失的问题,这是无法还原的。
    当我们在说 
    动物 e = new 人(); 就相当于:
    1. 人 a =  new 人(); 创建了一个 人;
    2. 然后 动物  e = a; 我们在沟通时只关注它是一个“动物 “而忽略不相关的具体的信息,这个过程叫”抽象“。到了晚上要住下,需要识别你是什么身份,这时,是”人“就住室内,动物就住外面小棚子里。这时因为要区分人还是动物,就要 e instanceof 人来判断,这时需要了解具体的信息而不是原来泛称的“动物”共性。动物 c = new 动物(); 人 d = (人) c; 是不成立的,因为,动物本身不是人,一个东西本来不是人的话是不可能 (人) new 动物() 的。一个对象在 new 出来时是什么就是什么。把人赋值给动物只是一个“抽象”的过程,它并不改变对象的本质特性而只是暂时地把它的特殊的性质隐藏了,在 cast down 的时候还是可以还原的。
      

  8.   

    简单的说。就是new了一个Employee 类,Manager的实例,如果要调用Manager类的方法就需要强制转换
    (Manager)e
      

  9.   

    new Manager();就是Manager实例吧,,,
      

  10.   

    e肯定是子类对象,因为后面new出来的是子类的对象,这只是父类的引用指向子类的对象,而instanceof就是判断左边的是不是右边的实例,所以返回true,至于访问方法和变量是,方法是按实例的类型调用,也就是实例是什么类型的就调用那儿的方法,而变量是按引用类型调用的,比如上面的:如果用e调用子类和父类都有的方法,则调用的将是子类的,而调用子类和父类都有的变量,则调用的将是父类中的属性
      

  11.   

    子类最父类,java继承体系能自动向上转换。