在这里 要 着重 讲解 两个 概念, 希望 读者 予以 重视。 1. 向上 转型 在上 面的 范例 TestJavaDemo1. Java 中, 父 类 对象 通过 子类 对象 去 实例 化, 实际上 就是 对象 的 向上 转型。 向上 转型 是 不需要 进行 强制 类型 转换 的, 但是 向上 转型 会 丢失 精度。 2. 向下 转型 与 向上 转型 对应 的 一个 概念 就是“ 向下 转型”, 所谓 向下 转型, 也就是说 父 类 的 对象 可以 转换 为 子类 对象, 但是 需要 注意 的 是, 这时 则 必须 要 进行 强制 的 类型 转换。 读者 可能 觉得 上面 的 两个 概念 有些 难以 理解, 下面 举个 例子 来 帮助 读者 理解。
/** * Created by xabcd on 2019/2/16. */ public class Java_shilihua { public void fun1() { System.out.println("1.Oerson{fun1()}"); } public void fun2() { System.out.println("2.Oerson{fun2()}"); } } //Student类拓展自Person类,也就继承了Person类中的fun1()、fun2()方法 class Student3 extends Java_shilihua { //在这里覆写Person类中的fun1()方法 public void fun1() { System.out.println("3.Oerson{fun1()}"); } public void fun3() { System.out.println("4.Oerson{fun3()}"); } }
/** * Created by xabcd on 2019/2/16. */ public class Testshilihua { public static void main(String[] args) { //此处,父类对象由子类实例化 // Java_shilihua p = new Java_shilihua(); //改成下面这句,相当于是由子类去实例化父类对象 Java_shilihua p = new Student3(); // 将p对象向下转型 Student3 s = (Student3)p; p.fun1(); p.fun2(); } }
/** * Created by xabcd on 2019/2/16. */ public class Testshilihua { public static void main(String[] args) { //此处,父类对象由子类实例化 // Java_shilihua p = new Java_shilihua(); //改成下面这句,相当于是由子类去实例化父类对象 Java_shilihua p = new Student3(); // 将p对象向下转型 Student3 s = (Student3)p; p.fun1(); p.fun2(); } }