您的位置:首页 > 编程语言 > Java开发

java中类对象之间的类型转换

2013-10-30 17:39 281 查看
类似于基本数据类型之间的强制类型转换。

存在继承关系的父类对象和子类对象之间也可以

在一定条件之下相互转换。

这种转换需要遵守以下原则:

1.子类对象可以被视为是其父类的一个对象

2.父类对象不能被当作是某一个子类的对象。

3.如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数。

4.如果父类对象与引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转化成子类对象的引用。

在java中,做强制类型转换时

父类与子类对象之间,同一父类的兄弟类对象之间如何强制转换?

例如:

class a

{ ... }

class b extends a

{...}

class c extends a

{...}

....

a a1=new a();

b b1=new b();

c c1=new c();

a1=b1 //合法

b1=a1 //不合法(理论上是合法的?)

b1=(b)c1//不合法(理论上是合法的?)

解答:

说明以下几点:

1.类型转换必须在继承层次类转换,即超类与子类之间.

2.兄弟类之间不存在继承,因此也不存在类型转换.

对类进行类型转换的一般原则如下:

1.总是可以“父=子”赋值。此时不需要类型转换。因为特定的子类也属于它的一般父类。也可以执行跨级跨层次的赋值,即父类可以式更高级别的父类。

2.可以执行类型转换“子=(子)父”,但需要运行时进行检查。如果父类变量引用的是正确的子类型,赋值将执行。如果父类变量引用的是不相关的子类型,将会生成class castException异常。

3.决不能在不相关的任何类之间执行类的赋值或者类型转换。

如果把搂主的a1当作动物,把b1当作狗,c1当作猫

a1=b1 //合法———也就是说狗是动物,当然成立

b1=a1 //不合法(理论上是合法的?)———就是说动物是狗,这当然不对了

b1=(b)c1//不合法(理论上是合法的?)———就是说狗是猫,这当然也不对了

对象在继承关系中的改变

对象的赋值是地址标识的传递,即两个对象名共同使用同一段内存地址。在Java中,对父类与子类对象之间的赋值作了如下规定:

1、子类对象名可以赋值给父类对象名;但父类对象名不可以赋值给子类对象名。

即:父类对象名=子类对象名;

2、如果一个父类对象名已经被子类对象名所赋值,那可以将父类对象名经强制转换赋值给子类对象名。

即:子类对象名=(子类类名)父类对象名;

常用的一种形式:方法中形参用父类型,实参用子类的对象名.

转至:http://m.blog.csdn.net/blog/yimu0214/5779490
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: