翻译人员: 铁锚
翻译时间: 2013年11月13日
原文链接: How does Java handle aliasing?
什么是Java的引用别名机制
Java的引用别名机制(原文为Aliasing,别名,即Java中的多态)意味着多个引用变量可以定位到同一个实际物理对象,而这些引用变量可以是不同的类型.public class TestPolyMorphism { public static class P{ public void print(String message){ System.out.println("P-->"+message); } } public static class S extends P{ public void print(String message){ System.out.println("S-->"+message); } } public static void main(String[] args) { S[] ss = new S[10]; P[] pp = ss; ss[0] = new S(); pp[0].print("你好"); // !!运行时错误,不能将父类对象,赋给子类数组; //pp[1] = new P();//java.lang.ArrayStoreException } }
package think; public class TestPolyMorphism { public static class P{ public void print(String message){ System.out.println("P-->"+message); } } public static class S extends P{ public void print(String message){ System.out.println("S-->"+message); } public void paint(String message){ System.out.println("S-->执行一些绘画操作-->"+message); } } public static void main(String[] args) { S[] arr = new S[10]; P[] pp = arr; arr[0] = new S(); pp[0].print("你好"); pp[1] = new P(); // !!运行时错误,不能将父类对象,赋给子类数组;java.lang.ArrayStoreException } }
Exception in thread "main" java.lang.ArrayStoreException: think.TestPolyMorphism$P at think.TestPolyMorphism.main(TestPolyMorphism.java:22)原因是Java在运行时才处理别名引用,在程序运行过程中,虚拟机发现 数组pp的第一个元素是 SS类型的对象,而不是PP类型的。
S[] arr = new S[10]; P[] pp = arr; pp[1] = new S(); pp[1].print("你好");输出没有错误:
S-->你好