8

我可以看到“upcast”一词与OOP有关,但我通过搜索互联网找不到确切的定义。

谁能解释这个术语是什么意思以及这种技术在什么情况下有用?

4

1 回答 1

10

根据您发布的标签的描述:

向上转换允许将子类类型的对象视为任何超类类型的对象。

基本上,这是您将子类实例转换为其超类之一的地方,以显示伪代码示例

class Base {
    function say_hi() { printf("Hello From Base Class\n"); }
}

class Person extends Base {
    function say_hi() { printf("Hello!"); }    // Overridden. Java expects an @Override annotation
}

class Dog extends Base {
    function say_hi() { printf("Woof!"); }    // Again, overridden
}

Base B = new Base();
Base P = new Person();   // Implicit upcast
Dog dog = new Dog();
Base D = (Base)Dog();    // Explicit upcast

B.say_hi(); // Hello from base class
P.say_hi(); // Hello!
D.say_hi(); // Woof!

有很多时候这很有用。一般来说,它定义了一个接口,所以你可以子类化一些东西,但仍然在它的原始上下文中使用它。假设你有一个游戏,你会有一个敌人的对象。这有一些共同的功能,比如它的当前位置、速度、健康和其他东西。尽管如此,一些敌人可能会以不同的方式移动,可能会播放不同的死亡动画,当然,也会以不同的方式绘制。问题是,由于它们具有相同的界面,因此您不希望必须使用特殊代码来处理每种不同类型的敌人。

It would make sense to make a base "Enemy" class with these fields and empty methods, but then extend it to have SmallEnemy, EvilEnemy, BossEnemy etc with their different models and animations, filling in the blank methods. These "blank" methods can also be referred to as abstract or pure methods.

于 2012-09-18T07:21:43.337 回答