欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

上转型对象与下转型对象

程序员文章站 2023-12-25 22:29:09
...

 

二类特殊的对象: 上转型对象与下转型对象.

这两类对象都是在继承层面来说的.

 

1. 上转型对象

上转型对象是将子类的对象赋值给父类的引用,形如: SuperClass sup = subClass;

 

上转型对象不能使用子类新增成员(包括成员变量,成员方法),只能使用子类重写父类的方法,被子类隐藏的父类变量;子类未重写的父类方法,未被隐藏的父类成员变量.

 

silentlakeside 写道
属性,私有方法、静态方法、final方法都是静态绑定的,即编译期确定的。
其他方法是动态绑定的,即虚拟机运行时确定。
后者才可能出现override的情况。

 

2. 下转型对象

下转型对象是将父类的对象赋值给子类的引用,形如: SubClass sub = (SubClass)supClass;

 

一般认为子类父类的对象不能赋值给子类的引用,如: SubClass sub = (SubClass)new SuperClass();

这样的写法编译期不会报错,但是会产生运行时类型转换错误:

Exception in thread "main" java.lang.ClassCastException: SuperClass cannot be cast to SubClass
 at Client.main(Client.java:49)

 

但是有一种特殊情况下,这种转换是可行的.

特殊情况: 当父类引用指向子类的对象的时候,即supClass是一个上转型对象,supClass可以通过强制转换的方式赋值给子类的引用.

举例:

/*
@author jarg
@TODO 下转型对象测试
*/
class SuperClass
{
	void display()
	{
		System.out.println("super:\t" + this.toString());
	}
}

class SubClass extends SuperClass
{
	void display()
	{
		System.out.println("sub:\t" + this.toString());
	}
}

public class Super2Sub
{
	public static void main(String[] args)
	{
		SuperClass sup = new SubClass();	// 构造上转型对象
		SubClass sub = (SubClass)sup;		// 构造下转型对象
		sub.display();
	}
}

 

结果输出: sub: [email protected]

当将上转型对象赋值给子类引用的时候,这种情况可行.

 

相关标签: 虚拟机 thread

上一篇:

下一篇: