本文共 2038 字,大约阅读时间需要 6 分钟。
package com.java.extend;class A1 { public void fun1() { System.out.println("A1___fun1()"); } public void fun2() { this.fun1(); }}class B1 extends A1 { public void fun1() { // 覆写父类方法 System.out.println("B1___fun1()"); } public void fun3() { System.out.println("B1___fun3()"); }}public class PloyDemo1 { public static void main(String[] args) { // TODO Auto-generated method stub B1 b = new B1(); // 实例化子类对象 A1 a = b; // 向上转型关系 /* * 通过子类进行父类对象实例化操作的,则如果调用的方法fun1()被子类B1覆写过,则肯定调用被覆写的过的方法 * 因为操作的是父类对象,所以是无法找到子类中定义的新方法fun3() */ a.fun1(); // 子类被覆写过 a.fun2(); // a.fun3();//子类的新方法,找不到的 }}向下转型程序2
package com.java.extend;class A111 { public void fun1() { System.out.println("A1___fun1()"); } public void fun2() { this.fun1(); }}class B111 extends A111 { public void fun1() { // 覆写父类方法 System.out.println("B1___fun1()"); } public void fun3() { System.out.println("B1___fun3()"); }}
public class PloyDemo3 { public static void main(String[] args) { // TODO Auto-generated method stub A111 aa = new A111();// 实例化父类对象 B111 b111 = (B111) aa;// 向下转型 b111.fun1(); b111.fun2(); b111.fun3(); }}以上程序会出现异常: Exception in thread "main" java.lang.ClassCastException:com.java.extend.A111 cannot be cast to com.java.extend.B111 at com.java.extend.PloyDemo3.main(PloyDemo3.java:28)出现异常,在对象转换时发生, 如果两个没有关系的类之间发生转换关系,肯定会发生该异常,类比Demo2,若想要产生向下转型,则必须先产生一个向上转型的关系“ A11 aa = new B11();”,表示建立关系
package com.java.extend;class A11 { public void fun1() { System.out.println("A1___fun1()"); } public void fun2() { this.fun1(); }}class B11 extends A11 { public void fun1() { // 覆写父类方法 System.out.println("B1___fun1()"); } public void fun3() { System.out.println("B1___fun3()"); }}public class PloyDemo2 { public static void main(String[] args) { // TODO Auto-generated method stub A11 aa = new B11();// 向上转型 B11 b11 = (B11) aa;// 向下转型 b11.fun1(); b11.fun2(); b11.fun3(); }}
转载地址:http://drhga.baihongyu.com/