首页 > 试题广场 >

给出如下代码:interfaceFoo{}classAlph

[单选题]
给出如下代码:
interface Foo {}
    class Alpha implements Foo { }
    class Beta extends Alpha {}
    class Delta extends Beta {
        public static void main(String[] args) {
            Beta x = new Beta();
// 此处插入代码
}
}
以下选项中,将哪个插入上述代码的第7行中,会导致程序抛出java.lang.ClassCastException异常( )
  • Alpha a = x;
  • Foo f= (Delta)x;
  • Foo f= (Alpha)x;
  • Beta b = (Beta)(Alpha)x;
类型转换​:Java允许将子类对象赋值给父类引用(向上转型),这是安全的;但将父类对象强制转换为子类引用(向下转型)时,若实际对象不是该子类的实例,则会抛出 ClassCastException
发表于 2025-05-14 19:21:56 回复(0)
向上转型、向下转型
发表于 2025-05-08 15:16:53 回复(0)
在Java中,向下转型(将父类引用指向的子类对象,显式转换为子类类型)可能失败并抛出 ClassCastException ,主要场景如下: - 父类引用指向的实际对象类型,并非目标子类类型: 例如,父类 Animal 引用指向 Dog 对象( Animal animal = new Dog(); ),若强行将其向下转型为 Cat 类型( Cat cat = (Cat) animal; ),会因实际对象是 Dog 而非 Cat 而失败。 - 父类引用指向的是父类自身的对象: 若父类引用直接指向父类实例( Animal animal = new Animal(); ),此时无论试图将其转型为任何子类(如 Dog dog = (Dog) animal; ),都会失败,因为父类对象无法被当作子类对象处理。 简单说,向下转型成功的前提是:父类引用实际指向的对象,必须是目标子类的实例。否则就会转型失败,这也是为什么向下转型前通常建议用 instanceof 判断(如 if (animal instanceof Dog) { Dog dog = (Dog) animal; } ),以避免异常。
发表于 2025-07-22 07:56:34 回复(0)
向上转型是自动和安全的 向下转型需要显式转换,只有当对象的实际类型是目标类型或其子类才能成功
发表于 2025-07-17 14:48:32 回复(0)