java中对象的类型转换
1.向上类型转换
在java中对象的向上类型转换是安全的。
具体解释请参考以下代码及其注释:
public class ExampleTest {
public static void main(String[] args) {
Animal animal=new Dog(); //向上类型转化,把Dog类的对象转换成了Animal类的对象,方法不会丢失
animal.eat(); //调用Dog的eat方法
}
}
class Animal{ //创建一个Animal类
public void eat(){ //定义一个动物eat的方法,不具体指定哪一种动物,便于程序扩展
}
}
class Dog extends Animal{//创建一个Dog类,继承自Animal父类
public void eat(){ //重写父类的eat方法
System.out.println("啃骨头");
}
}
class Cat extends Animal{//创建一个Cat类,继承自Animal父类
public void eat(){ //重写父类的eat方法
System.out.println("吃鱼肉");
}
}
输出结果:啃骨头
2.向下类型转换
在java中对象的向上类型转换是不安全的。因为会丢失子类中的方法!,我画一幅图说明以下就懂了。
因为子类是继承自父类的,所以父类有的方法子类肯定有,所以向上类型转换是安全的。而子类中有的方法父类不一定有,所以向下类型转换是不安全的
具体解释请参考以下代码及其注释:
public class ExampleTest {
public static void main(String[] args) {
Dog animal= new Animal();//向下类型转化,把Animal类的对象转换成了DOg类的对象,不安全
animal.eat(); //调用Dog的eat方法
}
}
Dog类和Cat类的代码和上面一样
避免向下类型转换出现错误的方法:
public class ExampleTest {
public static void main(String[] args) {
Dog animal= new Animal();//向下类型转化,把Animal类的对象转换成了DOg类的对象,不安全
if(animal instanceof Dog)
animal.eat(); //调用Dog的eat方法
}
}
Dog类和Cat类的代码和上面一样
java中instanceof 关键字是用来判断对象的类型是不和后面类是不是匹配,如果匹配返回true,否则返回false。用这个关键字可以限制类
型转换时出现错误