Tag: 强制转换

为什么Java需要明确的向下转换?

我已经看到了类似问题的其他答案,但所有这些答案都依赖于语言被定义为这样的事实。 以下是我正在寻求解释: 在inheritance层次结构中,父类型可以隐式保存子对象(为什么?),但是对于保存父对象的子引用,显式向下转换是必要的(为什么?)。 请举一些例子来解释为什么不这样做会失败,我的意思是使用动物,狗类型等。如果这个问题已经回答了我错过了它,引用它也会有所帮助。 例如: class Animal{ public void eat(){}; } class Dog extends Animal{ public void bark(){}; } class App{ Animal an = new Dog(); //1. why can animal store a dog but not a dog store an animal Dog dog = (Dog) new Animal(); //2. Dog has the behavior of an Animal so […]

java中的动态方法调度

class A{ int a=10; public void show(){ System.out.println(“Show A: “+a); } } class B extends A{ public int b=20; public void show(){ System.out.println(“Show B: “+b); } } public class DynamicMethodDispatch { public static void main(String[] args) { A aObj = new A(); aObj.show(); //output – 10 B bObj = new B(); bObj.show(); //output – 20 […]

用Java创建通用数组

public K[] toArray() { K[] result = (K[])new Object[this.size()]; int index = 0; for(K k : this) result[index++] = k; return result; } 这段代码似乎不起作用,它会抛出exception: java.lang.ClassCastException:[Ljava.lang.Object; 不能投… 有人能告诉我如何创建一个generics类型的数组? 谢谢。

Java:当B实现A时,从List 转换为List

我定义了以下类和接口: public interface A { } public class B implements A { } 我有一个B对象List ,我需要将其转换为A对象List : List listB = new List(); listB.add(new B()); // dummy data listB.add(new B()); // dummy data listB.add(new B()); // dummy data List listA = (List) listB; 上面的最后一行导致编译错误“无法从列表转换为列表”。 我尝试用以下方法解决这个问题: List listA = Arrays.asList((A[]) listB.toArray()); 不幸的是,抛出ClassCastException 。 有谁知道我怎么解决这个问题?

Java将对象转换为未实现的接口

我在学习书中发现了以下问题,有点困惑: 给定以下代码,如果用于替换/* INSERT CODE HERE */ ,哪个选项将启用Roamable类型的引用变量来引用Phone类的对象? (选择1个选项。) interface Roamable{} class Phone {} class Tablet extends Phone implements Roamable { //INSERT CODE HERE } 选项包括: Roamable var = new Phone(); Roamable var = (Roamable)Phone(); Roamable var = (Roamable)new Phone(); 由于接口Roamable和类Phone不相关,因此Roamable类型的引用变量不能引用Phone类的对象。 我认为正确的选项是4,但它说它是3。 但是, Phone并没有实现Roamable接口,所以你不能施展,可以吗?