class Chinese{
    
    public static void print(){
        System.out.println("this is 中国人");
        
    }
   
}
class Guangdongren extends Chinese{
    public static void print(){
        System.out.println("this is 广东人 ");
    }
    
}
class HunanRen extends Chinese{
    public static void print(){
        System.out.println("this is 湖南人 ");
    }
}
class GuangzhouRen extends Guangdongren{
    public static void print(){
        System.out.println("this is 广州人  ");
    }
}public class Test {
    
     public static void main(String args[]){
         
         Chinese c=new Chinese();//这样编译可以通过,但运行会抛出异常
          HunanRen h=(HunanRen)c;//  这是因为向下转型错误,中国人不一定是湖南人,这里
                                 //是不是可以这样理解要将c强制转换成一个HunanRen 
         
         HunanRen h=new HunanRen();//这样就没有问题,这是向上转型,
         Chinese c=(Chinese)h;    //湖南人一定是中国人这是是否可以理解为将h转换成Cinese
       //Chinaese h=new HunanRen();然后这里又怎么理解呢???
         h.print();
     }
  }
  

解决方案 »

  1.   

    推荐以下  THINKING IN JAVA 中文版的第一章讲的非常清楚阿这个中文版到处都有的下载阿
      

  2.   

    我知道,可是看think in java,看的头大啊
      

  3.   

    class B {}
    class A extends B {}
    A a = new A(); //不存在转型
    B b = new B(); //不存在转型
    A aa = (A) b; //向下转型
    B bb = a;     //向上转型想想类图, 上为基类,下为子类, 向上向下就比较清楚了
      

  4.   

    thinking in java 3rd
      

  5.   

    public class Test {
        
         public static void main(String args[]){
             
             Chinese c=new Chinese();//这是对的,也不会抛出异常
              HunanRen h=(HunanRen)c;// 这句错了
             
             //HunanRen h=new HunanRen();//这不是向上转型
             Chinese c=new HunanRen(); //这是向上转型
         }
      }
      

  6.   

    HunanRen r = (HunanRen)c//这是乡下转型