class  classA{
public void printv(){
System.out.println("classA");
}
}
class classB extends classA{
public void printv(){
 System.out.println("classB");
}
}
public class Testtwo {

  public static void main(String args[]){
classB objectB=new classB();
objectB.printv();
classA as=(classA)objectB;
as.printv();
  }
}
////////////////
不理解为什么强制类型转换了classA as=(classA)objectB;输出的还是classB呢?多态

解决方案 »

  1.   

    打个比方,人是动物的子类,你把一个人强制转换成动物类型,调用这个人的speak,那么他说的是人话还是什么呢?
    专业的说这个叫做override
      

  2.   

    知道啥叫覆盖(重写)么,objectB 只有一个方法,你怎么转都没用
      

  3.   


    classA as=(classA)objectB;既然ClassB就ClassA的子类,那么可以隐式类型转换,不用显式类型转换吧,直接写成:
    classA as=objectB;
      

  4.   

    classA as=(classA)objectB;
    就是as对象指向了objectB,都是同一个对象,当然调用哪个方法时还是ClassB的方法。
      

  5.   


    这不是向上转型吗?其实你不用强制转换,JVM也会帮你做的!
      

  6.   

    因为classB 把从classA 中继承的printv()方法覆写了,虽然调用的还是这个函数printv(),但内容已经比变了。