搜索文档
理论
- 对象间转型分为自动转换和强制转换。
- 自动转换:子类对象转父类类型。
- 强制转换:父类对象转子类类型。
自动转换
代码
javapackage Pack01; public class Human { public static void main(String[] args) { Person per = new Programmer(); per.father(); per.children(); // 报错 } } class Person { public void father() { System.out.println("父类"); } } class Programmer extends Person { public void children() { System.out.println("子类"); } }报错原因:变量 per 虽然是 Programmer 类的实例,但是它的类型是 Person,在 Person 类中找不到 children 方法,所以会报错。
强制转换
正常程序
java
package Pack01;
public class Human {
public static void main(String[] args) {
Person per = new Programmer();
// 强制转换
Programmer pro = (Programmer) per;
pro.children();
pro.father();
}
}
class Person {
public void father() {
System.out.println("父类");
}
}
class Programmer extends Person {
public void children() {
System.out.println("子类");
}
}异常程序
代码
javapackage Pack01; public class Human { public static void main(String[] args) { Person per = new Programmer(); // 强制转换 Accounting acc = (Accounting) per; acc.children(); acc.father(); } } class Person { public void father() { System.out.println("父类"); } } class Programmer extends Person { public void children() { System.out.println("子类"); } } class Accounting extends Person { public void children() { System.out.println("子类"); } }异常类型:ClassCastException
异常原因:编译不报错,运行报错。不能将两个同级别类型的对象进行类型转换。
