关于父类子类转换的小记录

来源:互联网 发布:控制上网的软件 编辑:程序博客网 时间:2024/06/06 06:55

一直以来已为自己懂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());}}