欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
什么是Java的引用别名机制
Java的引用别名机制(原文为Aliasing,别名,即Java中的多态)意味着多个引用变量可以定位到同一个实际物理对象,而这些引用变量可以是不同的类型。
下面的代码中,S类继承P类, pp 和 ss 分别是P类型 和 S类型的两个数组变量名。
[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
}
}
在内存中,pp和ss都指向了同样的内存地址。(我们可以说,指针pp,指针ss;或者说pp引用,ss引用。)
图1
pp和ss指向了同一个物理地址,在实际运行过程中,多态特性根据真实的对象类型决定调用父类还是子类的具体方法,而不是根据引用变量的类型。
Java 如何处理引用别名机制
如果将下列代码拷贝到eclipse中,将不会有什么编译期错误:
[java]
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);
}
}
[1][2]
深重如溺入蓝色的海洋,无法呼吸。