简介:java对象的类型转换是指存在继承关系的对象之间的类型转换。并非所有对象都可以
- 进行对象间的类型转换。一共有两种,分别是向上转型和向下转型。 1、向上转型:父类引用指向子类对象。 语法:FatherClass
obj = new SonClass();
FatherClass:父类类名(具体类或者抽象类)或接口名
obj:对象(引用)
SonClass:子类类名(继承父类的具体类,继承抽象类的具体子类,接口的实现类)
向上转型就是将子类对象赋值给父类引用 使用向上转型后可以调用父类类型中的多有成员,但是不能调用子类类型中的特有成员,
即定义在子类中的特有成员,并非继承父类类型中的成员,由于方法存在重写,所以具体 的实现效果,需要结合子类的具体实现情况。
例://父类
Class Father{
int a = 10;
int b = 20;
public void method(){
System.out.println(“父类 - 成员方法”);
}
}
//子类
Class Son extends Father{
int c = 30;
public void method(){
System.out.println(“子类 - 成员方法”);
}
}
//测试类
Class Demo{
public static void main(String[] args){
Father father = new Son();
father.method();//结果:子类 - 成员方法
}
}
2、向下转型:子类引用指向父类对象
- 语法:SonClass obj = (son) new FatherClass();
SonClass:子类类名(继承父类的具体类,继承抽象类的具体子类,接口的实现类)
obj:对象(引用)
FatherClass:父类类名(具体类或者抽象类)或接口名 向下转型可以调用子类类型中的所有成员。如果父类引用指向的是子类对象,此时 向下转型是安全的,编译运行都不会有问题。如果父类引用指向的是父类对象,此 时向下转型是不安全的,编译不会出错,但是运行时会出现类型转换异常。通过使 用instanceof运算符判断父类引用指向的对象是否是子类对象,可以避免出现类 型转换异常。
例://父类
Class Father{
int a = 10;
int b = 20;
public void method(){
System.out.println(“父类 - 成员方法”);
}
}
//子类
Class Son extends Father{
int c = 30;
public void method(){
System.out.println(“子类 - 成员方法”);
}
}
//测试类
Class Demo{
public static void main(String[] args){
//安全转换
Father father = new Son();//父类引用指向子类对象
Son son = (Son)father;//强制类型转换
//不安全转换
//Father father = new Father();//父类引用指向父类对象
//Son son = (Son)father;//强制类型转换,出错(类型转换异常)
//附:子类引用不可以直接指向父类对象
}
}