类型转换
有关向上造型和向下造型的核心精髓就是一句话:在创建实例的时候到底是子类的实例还是父类的实例。如果是子类的实例,则就完全可以进行强制类型转换,转换为子类,如果创建的是父类的对象,则不可以i强制类型转换。
类型转换(继承或者实现关系 父类与子类)
父类的引用指向子类的对象。实例化成子类,可用方法使父类中的方法,方法体实现是子类中的方法(体现了多态)。实例化成谁就会用到谁的方法体。
//父类
class A{
public void s(){
System.out.println("A");
}
public void s1(){//独有的方法
System.out.println("A temp");
}
}
class B extends A{
@Override
public void s() {
System.out.println("B");
}
public static void main(String[] args) {
A a = new B();
a.s();//虽然是父类引用,但是是子类实例对象,因此如果有子类当中有的方法,就使用子类的
a.s1();//子类当中没有的,就使用父类当中的,只有在执行的时候才能报错
B b = (B) a;//因为是实例对象B,当然可以转换为B
b.s();//也可以使用方法
b.s1();//子类对象当中拥有把那个可以使用父类当中protected和poblic修饰的方法,
A aa = new A();//如果是父类的实例对象,强制类型转换会报错
B b1 = (B) aa;
b1.s();
}
}
输出结果:
B
A temp
B
A temp
//向下强制转韩的时候报错
Exception in thread "main" java.lang.ClassCastException: ledcode.thinkInJava.pack.A cannot be cast to ledcode.thinkInJava.pack.B
at ledcode.thinkInJava.pack.B.main(MyHelloWorld.java:63)
Process finished with exit code 1
注意
向上类型转换不需要使用强制类型转换符,向下转换则需要强制类型转换符;