向上转型和向下转型

向上和向下?

向上转型和向下转型是在继承中出现的情形。

通俗的理解,向上转型,将子类转成父类,向下转型,将父类转成子类,java中提供自动的向上转型

向上转型时,如果父类含有f()方法,子类中不含有f()方法,此时,调用时将执行父类中的f()方法

向上转型时,如果父类含有f()方法,子类中也含有f()方法,此时,调用时将执行子类中的f()方法

向上转型时,如果子类含有f()方法,父类中不含有f()方法,此时,调用时将会出错

class Father{

    Father() {
     //   System.out.println(static_data);
//        System.out.println("调用父类的构造函数");
    }
    void f() {
        System.out.println("执行父类f()方法");
    }


}

class Son extends Father{
    Son() {
//        System.out.println("调用子类的构造函数");
    }
    void f(){
        System.out.println("执行子类中的f()方法");

    }

    void g() {
        System.out.println("执行子类的g()方法");

    }

}

public class test2 {
    public static void main(String[] args) {
        Father son = new Son();
        son.f();
        //由于向上转型,只能调用父类中的方法
        //son.g();



    }
}

向下转型,可想而知是将父类型转为子类型,这样做是有一定风险的,向上转型可以看成一种窄化处理,而向下转型可以看成一种宽化处理,java中,一旦涉及宽化就可能出现问题。因此,一般不建议向下转型操作。向下转型会进行严格的检查,如在运行期间会对类型进行"运行时类型识别"RTTI。下面是一个例子:

将上面程序中的

 Father son = new Son();
改为:
Son father = (Son)new Father();
运行时会出现异常:

原文地址:https://www.cnblogs.com/xuhan74520/p/13804345.html