我对Java语言中的类型化有一个误解。问题是ClassCastException。例如,在这段代码中,假设动物是Dog类的父类,
Animal animal = new Animal();
Dog dog = (Dog) animal;
EditText editText = (EditText) findViewById(R.id.edit_message);
一旦创建了对象,就不能更改其类型。这就是为什么你不能把动物投给狗。
但是,如果创建子类的对象,则可以在超类类型的变量中保留对它的引用,以后可以将其强制转换为子类类型。
这将起作用:
Animal a = new Dog ();
Dog d = (Dog) a;
在Android示例中,您有一个布局资源,如下所示:
<EditText
android:id="@+id/edit_message"
..."/>
这个定义将导致Android创建edittext
的实例,因此可以将findviewbyid
返回的视图强制转换为edittext
。不能将其强制转换为edittext
的超类型。
问题内容: 我有以下课程 这只是我实际架构的简化版本。最初,我不知道需要创建的人员类型,因此处理这些对象创建的函数将常规对象作为参数。 现在,我想使用此父类对象访问子类的方法。我还需要不时访问父类方法,所以 我不能 使其 抽象 。 我想我在上面的示例中简化太多了,所以这是实际的结构。 if语句显示“无法为QuestionOption找到getMultiple”。OuestionOption具有更多
我正在修改open JDK以添加特性,我已经遇到了两次,但没有好的解决方案。
当我们实例化子类对象时,父类的构造函数也会被调用。那么它是父类的对象的创建吗?
我试图在Scala中返回抽象泛型类的子类,但它无法编译。我得到A类型的表达式不符合预期的B类型。这是我使用的代码: 创建()的签名应该是什么? 谢谢
问题内容: 我正在向我的朋友解释OOP。我无法回答这个问题。(我有多可耻? 我只是想逃避,因为OOP描绘了现实世界。在现实世界中,父母可以容纳孩子,但孩子不能容纳父母。OOP也是如此。我知道它很愚蠢。:P 为什么此陈述无效? 因为aChild的成员是aParent成员的超集。那为什么孩子不能容纳父母。 问题答案: 正是因为aChild是aParent功能的超集。你可以写: 因为每只狐狸都是动物。但
问题内容: 分配;不会产生编译错误,但在运行时会生成。为什么编译器无法检测到此错误? 问题答案: 通过使用强制转换,你实际上是在告诉编译器“相信我。我是专业人士,我知道我在做什么,我知道尽管不能保证,但是我告诉你这个变量肯定是会成为一只狗。” 由于动物实际上不是狗(它是动物,你可以做;,也可能是狗),因此VM在运行时会引发异常,因为你违反了这种信任(你告诉编译器一切都会好的,并且不!) 编译器比盲