向上转型与向下转型

class Useful{
    public void f(){
        System.out.println("Useful f()");
    };
    public  void g(){
        System.out.println("Useful g()");
    };
}

class MoreUseful extends Useful{
    public void f(){System.out.println("MoreUseful f()");};
    public void g(){System.out.println("MoreUseful g()");};
    public void u(){System.out.println("MoreUseful u()");};
    public void v(){System.out.println("MoreUseful v()");};
    public void w(){System.out.println("MoreUseful w()");};

}

public class RTTI {
    public static void main(String[] args) {
        Useful[] x = {new Useful(),new MoreUseful()};
        x[0].f();  //正确,输出:Useful f()
        x[1].f();  //正确,输出:MoreUseful f(),这里体现了多态的概念
//      x[0].u();  //错误,Useful类型没有u()方法
//      x[1].u();  //错误,向上转型,丢失方法:Useful类型没有u()方法
//      ((MoreUseful) x[0]).u();  //错误,无法直接向下转型,抛出异常
        ((MoreUseful) x[1]).u();  //正确,向上转型后,能成功向下转型,输出:MoreUseful u()




    }
}