今晚项目的几个同学有次关于Java强制类型转换的讨论,当时脑袋瓜浑浑的,现在理一下思路.
用个例子:
view plaincopy to clipboardprint?
public class animal
{
private int age;
private String color;
public void eat() {}
}
public class animal
{
private int age;
private String color;
public void eat() {}
}
view plaincopy to clipboardprint?
public class dog extends animal
{
private String onwer;
public void bark(){}
}
public class dog extends animal
{
private String onwer;
public void bark(){}
}
以上面animal和dog为例,dog继承animal的属性和方法并扩展之,在animal的基础上增加了owner的属性和bark()方法.在这个例子里,基类是animal,dog扩展自animal,是其子类.
下面说一下强制转换. 我们知道,狗是一种动物,而动物就不一定会是狗. 所以, animal a = (animal) dog这种转换是正确的,因为狗是一种动物,狗当然能转换为动物. 但动物不能硬硬转换为狗,也就是说 dog d = (dog) animal这样是不行的,dog含有扩展属性和方法,这在animal中不含有. 这就说,Java的强制转换,是从子类可以转换为基类,但基类不含有子类的扩展属性所以不能强制转换为子类.
再举一个例子:
view plaincopy to clipboardprint?
class human{int sum;}
class man extends human
{
double sum;
责任编辑:小草