gpt4 book ai didi

java - Java中的方法重写-将子类对象分配给父类变量

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:49 26 4
gpt4 key购买 nike

class Person{
String name;

void show(){
System.out.println("I am parent");
}
}

class Student extends Person{
String dit;

void show(){
System.out.println("I am child");
}
}

public class NewClass {
public static void main(String[] args) {
Person p;
p = new Student();

p.name = "Kamal";
p.dit = "DIT/10/c1/1234"; // I'm not allowed to do this
p.show(); // Here in overriding child class method is called
}
}

我很困惑。据我了解,“p”变量无法访问 dit(即使它是用 Student 分配的),因为 p 的数据类型是 Person,它是父类。因此父类不能访问子类的属性和方法。但在重写它时调用子类方法。

我是java新手。请帮助我理解这一点。

最佳答案

这称为运行时多态性

JVM 在运行时根据对象的内容而不是对象的类型决定调用哪个方法。

您显然无法访问dit,因为对象的类型不支持它。 show 方法是可访问的,因为它是父类和子类的一部分

更多详情here

这是一个经典的例子

class Animal {
void whoAmI() {
System.out.println("I am a generic Animal.");
}
}
class Dog extends Animal {
void whoAmI() {
System.out.println("I am a Dog.");
}
}
class Cow extends Animal {
void whoAmI() {
System.out.println("I am a Cow.");
}
}
class Snake extends Animal {
void whoAmI() {
System.out.println("I am a Snake.");
}
}

class RuntimePolymorphismDemo {

public static void main(String[] args) {
Animal ref1 = new Animal();
Animal ref2 = new Dog();
Animal ref3 = new Cow();
Animal ref4 = new Snake();
ref1.whoAmI();
ref2.whoAmI();
ref3.whoAmI();
ref4.whoAmI();
}
}
The output is

I am a generic Animal.
I am a Dog.
I am a Cow.
I am a Snake.

关于java - Java中的方法重写-将子类对象分配给父类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32388903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com