Java 铸造对象--它们是如何工作的?

Java 铸造对象--它们是如何工作的?,java,casting,Java,Casting,我有一个Person类,Object类就是Java的Object类。我有一个学生类,它也扩展了Person类。有人能解释为什么在这些不同的场景中,我在施法和一些工作时会出错吗 Person p = (Person) new Object(); // error Person p = (Person) new Student(“Steve”, 21, 12345); // works Object o = new Person(“Steve”, 21); // works Person p = (

我有一个Person类,Object类就是Java的Object类。我有一个学生类,它也扩展了Person类。有人能解释为什么在这些不同的场景中,我在施法和一些工作时会出错吗

Person p = (Person) new Object(); // error
Person p = (Person) new Student(“Steve”, 21, 12345); // works
Object o = new Person(“Steve”, 21); // works
Person p = (Person) o; // works

施法不会神奇地把一个物体变成别的东西。 它只是告诉编译器尝试以不同的类型访问一段数据

在第一个示例中,您创建了一个无法投射到Person中的对象。施法并不能神奇地改变事物

在第二个示例中,创建一个Student对象。既然学生从人身上继承,你也可以考虑人的类型。


第3行:再次创建Person对象,但将其保存在object类型的变量中。这并没有改变对象的实际情况,这就是为什么向下转换到Person是有效的。

对象类是所有java类的基类,这就是为什么对象的引用能够容纳任何java类的对象

但若任何类扩展了另一个类,那个么子类就不会直接扩展对象类。在这种情况下,多级继承概念隐式实现

就你而言

人级是超级级

学生班是子班


这意味着学生类可以获得Person类的属性,在这种情况下,当学生通过Person类扩展对象类时,强制转换是可能的。

可以将childsub类对象强制转换为parentsuper类,因为子类已经知道并拥有一切。变量和方法来自父类的继承,但不是相反

例如:

Parent class has method a1().
Child class added a method a2().
Child automatically gets a1() through inheritance.
Parent knows nothing about a2().

你可以读这个,因为一个人是一个人,但一个物体不是。