Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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中的casting问题_Java - Fatal编程技术网

java中的casting问题

java中的casting问题,java,Java,我是java新手,在铸造方面有一些问题。 我有一个叫做Parent的类,还有一个叫做Children的类,Children类是Parent的子类 public class Parent { int age; String occupation; public void print() { System.out.println("My age is:"+ age + "and i am a:" + occupation); } } p

我是java新手,在铸造方面有一些问题。 我有一个叫做Parent的类,还有一个叫做Children的类,Children类是Parent的子类

public class Parent
{
    int age;
    String occupation;

    public void print()
    {
        System.out.println("My age is:"+ age + "and i am a:" + occupation);
    }
}



public class Children extends Parent
{
    int height;

    public static void main(String args[])
    {
        Children c = new Children();
        Parent p = new Parent();

        p=c;
        c=(Children) p;

        /**Here***/



    }

}
我的问题是,当我在选角后添加p.XXX时,我只看到年龄和职业,例如p。当我做c.xxx时,我看到所有的年龄、职业和身高都是可以接近的。 我想当我做p=c时,p现在被认为是一个儿童类的实例,不是吗?如果是,那么为什么我没有看到高度整数? 当我做c=(Children)p时,父类的一个实例被分配给了Children类的一个实例,因为父类实例没有选项,所以我们从父类到子类进行强制转换,对吗

我想当我做p=c时,p现在被认为是一个儿童类的实例,不是吗

否。变量
p
的类型仍然是
Parent
。该值将是对
子类
实例的引用,但编译器不考虑这一点。它只使用声明的变量类型

当我做
c=(Children)p
时,
Parent
类的一个实例被分配给
Children
类的一个实例,并且由于
Parent
实例没有选项,所以我们从父类到子类进行转换,对吗

你根本没有改变这个实例。您正在强制转换类型为
Parent
的表达式-该值将是一个引用。在执行时,JVM将确保该值实际上是对
子类
或某个子类型(或null)的引用—如果不是,JVM将抛出异常


区分变量、引用和对象是非常重要的——它们是三个完全不同的概念,确保您理解它们之间的区别将使许多其他事情变得更清楚。

那么p=c的用途是什么???@qwrqwr:它将
p
的值设置为与
c
的值相同(此时)。仅此而已。强制转换只是一个运行时操作,用于检查强制转换的对象是否可以被视为请求类型的对象。对象本身保持不变。在您的示例中,c=(子对象)只有当p的实例实际上是一个子类或某个子类的实例时,p才会起作用。它称为赋值兼容性,可以在运行时(在执行类似的强制转换之前)通过“instanceof”操作符或Class.isAssignableFrom()方法进行检查。