用父类声明子类; 称为多态;(向上转型)
用声明父类的子类数据转换成子类声明;称为向下转型;
father t = new son();
声明成功有两种方法; 数据与声明的类型一样; 数据与声明的类型构成多态;
用father类进行声明, 然后检查 new son();发现new son() 是father的子类构成多态 就可以进行正常声明;
son t = new father(); // 会报错; 因为既不相等也不构成多态;
但是
father t = new son();
System.out.prinrln((son)t); // 不会报错; 为什么;
因为 (son)t 是属于类型转换; 相当于不用管 t是一个什么类型的数据; 我只要看看son声明 是否是t的数据相同或者是否构成多态;
相当于 son 变量名 = t(new son);
也就是说我们可以做这样一部操作;
son t = new son();
(father)son // 这样也不会报错;
结论;
int a = 1;
(double) a // 此时就相当于 不管a的类型声明 只需要管转换的类型是否与数据 符合规则;
相当于 double 变量名 = 1
不要小看上面的这种思考方式;
因为你只要按照上面的这种方式就可以一眼看出是否能进行类型转换;
例如
int a = 1;
String b = (String)a; // 不能
// 因为相当于 String b = 1; 1 不能作为String 只能是 "1";
int a = 1;
char b = (char)b; // 可以
// 因为 1可以按照字符码转换成字符
转型就是把旧的类型声明概念抛弃掉,只需要管数据与新的类型声明是否符合规则;