一直以来已为自己懂java类型转换,子类可以当成父类,父类无法转成子类,但是今天做实验发现,有一种情况父类是可以强转成子类而不会报类型转换异常的。
如果新建一个父类对象然后强转成子类型,则即使子类型没有自己的字段也会报错(见Main类代码注释部分);
如果将一个子类对象向上转型成父类型后再把它强转成子类对象,则不会有任何问题。(见Main类代码非注释部分)
父类代码
public class Father {
private String name = "father";
private int age = 50;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
子类代码:
public class Son extends Father {
private String sex = "male";
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
Main类:
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
/**
* 新建一个父类对象转成子类,会报类型转换异常ClassCastException
*/
Father f = new Father();
Son s = (Son) f;
/**
* 如果先把一个子类对象向上转型成父类型,然后再将其强转成子类对象,则不会有任何问题。
*/
// Son son = new Son();
// Father f = son;
// Son s = (Son) f;
System.out.println(s.getAge());
System.out.println(s.getName());
System.out.println(s.getSex());
}
}