类似于基本数据类型之间的强制类型转换。
存在继承关系的父类对象和子类对象之间也可以
在一定条件之下相互转换。
这种转换需要遵守以下原则:
1.子类对象可以被视为是其父类的一个对象
2.父类对象不能被当作是某一个子类的对象。
3.如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实 n际参数。
4.如果父类对象与引用指向的实际是一个子类对象,那么这个父类对象的引用可以用强制类型转 n换转化成子类对象的引用。
在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、如果一个父类对象名已经被子类对象名所赋值,那可以将父类对象名经强制转换赋值给子类对象名。
即:子类对象名=(子类类名)父类对象名;
常用的一种形式:方法中形参用父类型,实参用子类的对象名.