gpt4 book ai didi

Java - 向上转型和向下转型

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:42 25 4
gpt4 key购买 nike

我知道 stackoverflow 中有很多文章/问题描述了 Java 中的向上转型和向下转型。我知道什么是向上和向下。但我的问题并不具体于此。

向上转换 - 从子级到父级的转换 - 编译器会负责。无需类型转换
向下转型 - 从父级到子级的转换 - 需要显式转换

public class Animal {

public void getAnimalName(){
System.out.println("Parent Animal");
}
}
public class Dog extends Animal{

public void getDogName(){
System.out.println("Dog");
}
}

public static void main(String[] args) {

Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();

Animal vv = new Dog();
Dog cc = (Dog)vv;//DownCasting
cc.getAnimalName();
cc.getDogName();



如果您查看 AnimalDog 类,每个类都有自己的方法,例如 getAnimalName()getDogName()。因此Dog扩展了Animal(是一种关系),所以我们可以在派生类(子类)中使用基类(父类(super class))的方法

现在考虑 Main 方法中的以下代码,
因此,我在这里创建一个 Dog 对象 w.rt Animal。所以我只能访问 Animal 属性(方法)

Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();<br>
O/P : Parent Animal<br><br>

现在假设我想将基类方法重写到派生类中

public class Dog extends Animal{

@Override
public void getAnimalName(){
System.out.println("Parent Animal overridden here");
}
public void getDogName(){
System.out.println("Dog");
}
}<br>

在主方法中,

Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();<br>
O/P : Parent Animal overridden here<br><br>

尽管我正在创建一个 Dog 对象 w.r.t Animal,但这里它打印的是在派生类中重写的基类方法。

 O/P : Parent Animal overridden here<br>

想知道为什么它会这样。这是因为覆盖吗?

请提供您宝贵的意见。

最佳答案

当您将子类引用到父类时,引用指针上的方法调用将调用子类方法。

Dog d = new Dog();
Animal a = d; // Upcasting
a.getAnimalName();

这里a.getAnimalName();调用子类的 getAnimalName() 方法,因为它是从基类继承的,所以调用父类的方法。它不是直接在基类上调用,而是通过子类的继承来调用。当你重写时,子类会立即调用它,不需要去父类检查该方法是否存在。

但需要注意的是,基类引用不能调用子类上未在基类中定义的方法。

关于Java - 向上转型和向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40393875/

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