java-无法强制转换到子类
我在这个结构中有两个实体:java-无法强制转换到子类,java,oop,casting,Java,Oop,Casting,我在这个结构中有两个实体: class Parent{ public int type; //Setters and getters } class Child1 extends Parent{ } 我有一个Parent的实例,我想根据以下条件将其强制转换为Child1: Parent parent = ... if(parent.getType() == 1) Child1 child = (Child1) parent; 但是它给了我ClassCastExcept
class Parent{
public int type;
//Setters and getters
}
class Child1 extends Parent{
}
我有一个Parent
的实例,我想根据以下条件将其强制转换为Child1
:
Parent parent = ...
if(parent.getType() == 1)
Child1 child = (Child1) parent;
但是它给了我
ClassCastException
。我如何解决这个问题?在java中使用向下转换的最佳方法是什么?您不能将父类型对象强制转换为子类型对象。您误解了继承行为。您不能将父类型对象强制转换为子类型对象。您误解了继承行为。您不能将父类型对象强制转换为子类型对象。您误解了继承行为。您不能将父类型对象强制转换为子类型对象。您误解了继承行为。您能将动物类转换为狗类吗?尽管你知道还有很多动物的例子它的正义之狗是一种动物,这就是为什么你可以将它投给动物,但狗不是动物你能将动物类投给狗类吗?尽管你知道还有很多动物的例子它的正义之狗是一种动物,这就是为什么你可以将它投给动物,但狗不是动物你能将动物类投给狗类吗?尽管你知道还有很多动物的例子它的正义之狗是一种动物,这就是为什么你可以将它投给动物,但狗不是动物你能将动物类投给狗类吗?尽管你知道还有很多动物的例子它的just Dog是一种动物,这就是为什么你可以将它扔给动物,但Dog不是动物你需要使用:
Parent parent = new Child1();
您需要使用:
Parent parent = new Child1();
您需要使用:
Parent parent = new Child1();
您需要使用:
Parent parent = new Child1();
只有当对象已经是子类的类型时,才可能对该子类进行强制转换 对象的强制转换不会改变对象的类别。它只是告诉编译器“这个对象实际上是子类的一个实例,因此使用它”。(基元类型的强制转换不同,它们实际上会更改值的类型!)
在代码示例中,您没有显示父对象是如何创建的,因此我不知道这是否真的是问题所在。也许您可以添加缺少的代码来说明这一点。只有当对象已经属于该类型时,才能对子类进行强制转换 对象的强制转换不会改变对象的类别。它只是告诉编译器“这个对象实际上是子类的一个实例,因此使用它”。(基元类型的强制转换不同,它们实际上会更改值的类型!)
在代码示例中,您没有显示父对象是如何创建的,因此我不知道这是否真的是问题所在。也许您可以添加缺少的代码来说明这一点。只有当对象已经属于该类型时,才能对子类进行强制转换 对象的强制转换不会改变对象的类别。它只是告诉编译器“这个对象实际上是子类的一个实例,因此使用它”。(基元类型的强制转换不同,它们实际上会更改值的类型!)
在代码示例中,您没有显示父对象是如何创建的,因此我不知道这是否真的是问题所在。也许您可以添加缺少的代码来说明这一点。只有当对象已经属于该类型时,才能对子类进行强制转换 对象的强制转换不会改变对象的类别。它只是告诉编译器“这个对象实际上是子类的一个实例,因此使用它”。(基元类型的强制转换不同,它们实际上会更改值的类型!)
在代码示例中,您没有显示父对象是如何创建的,因此我不知道这是否真的是问题所在。也许您可以添加缺少的代码来说明这一点。您没有正确创建对象,请像这样创建对象
父级子级=新的子级1() 您没有正确创建对象,请创建如下对象
父级子级=新的子级1() 您没有正确创建对象,请创建如下对象
父级子级=新的子级1() 您没有正确创建对象,请创建如下对象
父级子级=新的子级1() 检查LSP原则我假设您在Child1的构造函数中将type设置为1?如果是这样的话,这是一个相当重要的细节。为什么不想使用Child1的实例作为您的条件?@AndyTurner是的,您是对的。@hamed请编辑您的问题以显示该细节。检查LSP原则我假设您在Child1的构造函数中将type设置为1?如果是这样的话,这是一个相当重要的细节。为什么不想使用Child1的实例作为您的条件?@AndyTurner是的,您是对的。@hamed请编辑您的问题以显示该细节。检查LSP原则我假设您在Child1的构造函数中将type设置为1?如果是这样的话,这是一个相当重要的细节。为什么不想使用Child1的实例作为您的条件?@AndyTurner是的,您是对的。@hamed请编辑您的问题以显示该细节。检查LSP原则我假设您在Child1的构造函数中将type设置为1?如果是这样的话,这是一个相当重要的细节。为什么不想使用孩子的实例1作为您的条件?@并且返回是的,您是对的。@hamed请编辑您的问题以显示该细节。