Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-无法强制转换到子类_Java_Oop_Casting - Fatal编程技术网

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请编辑您的问题以显示该细节。