java数据类型转换

Person person = new Student();
person = (Student) person;

Person是父类,Student是子类,为什么person = (Student) person;后,person不能调用子类的特有方法?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7596164
  • 以下回答由chatgpt基于相关博客总结生成:

    这个问题涉及到Java中的多态和引用类型转换的概念。

    在Java中,多态是指通过父类的引用来引用子类的对象。在你的代码中,Person是父类,而Student是子类,通过将一个子类对象赋值给父类对象的引用person,实现了多态。

    但是,尽管你在代码中将person强制转换为Student类型的引用:person = (Student) person;,但这并不能改变实际对象的类型。这个转换只是让编译器相信person引用是Student类型,以便在编译时可以调用Student特有的方法,但在运行时,它实际上还是一个Person类型的对象。

    因此,尽管强制类型转换后的person引用看起来像Student类型,但它仍然无法调用子类特有的方法。如果你想调用子类特有的方法,你需要将person引用重新赋值为一个指向Student对象的引用,如下所示:

    Person person = new Student();
    Student student = (Student) person; // 将person重新赋值给student
    // 然后就可以使用student引用调用Student类的特有方法了
    

    总结一下,通过将一个子类对象赋值给父类对象的引用,实现了多态。但是在运行时,该引用仍然只能调用父类中定义的方法。如果需要调用子类特有的方法,需要将父类引用重新赋值为指向子类对象的引用。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

子类的成员方法和变量, 对于父类来讲是不可见的,
也就是 不论 你的父类引用 指向的是谁, 父类引用 都无法访问 子类的成员变量和方法

因为你强转为student之后,又赋值给了person对象,就是又转成了person对象,所以还是不能调用student的方法,如果赋值的对象是Student类就可以用。

向上转型了,person不能调用子类特有的方法,如果想调用子类特有的方法,直接调用就可以了(向下转型)

调用不了,可以把父类方法设置成protected