/*
 * 创建日期 2005-8-3
 *
 * TODO 要更改此生成的文件的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 *//**
 * @author Administrator
 *
 * TODO 要更改此生成的类型注释的模板,请转至
 * 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */class Chinaese{
    
    public static void print1(){
        System.out.println("this is 中国人");
        
    }
   
}
class Guangdongren extends Chinaese{
    public static void print2(){
        System.out.println("this is 广东人 ");
    }
    
}
class HunanRen extends Chinaese{
    public static void print3(){
        System.out.println("this is 湖南人 ");
    }
}
class GuangzhouRen extends Guangdongren{
    public static void print4(){
        System.out.println("this is 广州人  ");
    }
}public class Test {
    
     public static void main(String args[]){
         Chinaese hunan=new HunanRen();
         Object o=new HunanRen();
   
         hunan.print1();
     }
  }

解决方案 »

  1.   

    Chinaese hunan=new HunanRen();这个就是向上转型!
    Object o=new HunanRen(); 这个也是向上转型,因为object是所有类的基类!
    这样的话就是向下转型! (HunanRen)o.print3();但是前提是你必须有Object o=new HunanRen();这一句,因为向下转型是有风险的!
      

  2.   

    你这个“上传”“下传” 闻所未闻, 不知所指为何?是不是  Class Cast -- Up Cast & Down Cast ?
    Chinaese hunan=new HunanRen();
             Object o=new HunanRen();
    一个 HunanRen 他继承自 Chinese , 所以一个指向了 Chinese 的句柄是可以指向 HunanRen 的实例,但是这个时候 hunan 自动向上溯型 为 Chinese 类型的, 运行时的具体实例的类型只有运行时才知道,你如果让他  Guangdong gd = (Guangdong) hunan ; 是会出错的,因为本身 hunan 不是 Guangdong 的实例。  Guangdong gd = new Guangdong();  HunanRen hn = (HunanRen) gd ; 也一样出错,总之, 子类型  上溯 成父类型是自动的,但是下溯 却要 明确 cast ,因为他还可能是父类型的其他派生类型(就像兄弟一样)。
      

  3.   

    楼主语法注意一点,chinaese?这什么意思?还是使用 chinese好懂一点
      

  4.   

    把所有的 print X ,改写为 printString(){
    System.out.print(xxxxxxx);//相应的输出
    }
    这样重写printString()方法。会让你感觉更加理解深刻
      

  5.   

    Chinaese hunan=new HunanRen();这个就是向上转型!
    Object o=new HunanRen(); 这个也是向上转型,因为object是所有类的基类!
    这样的话就是向下转型! (HunanRen)o.print3();但是前提是你必须有Object o=new HunanRen();这一句,因为向下转型是有风险的!