can*_*an. 6 oop definition upcasting
我可以看到术语"向上翻转"与OOP有关,但我无法通过搜索互联网找到确切的定义.
任何人都可以解释一下该术语的含义以及这种技术在什么情况下有用?
从您发布的标签说明中:
Upcasting允许将子类类型的对象视为任何超类类型的对象.
基本上,它是将子类实例转换为其超类之一的地方,以伪代码显示示例
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!
Run Code Online (Sandbox Code Playgroud)
这有用的次数有很多种.通常,它定义了一个类别的接口,因此您可以将某些内容子类化,但仍然可以在其原始上下文中使用它.假设你有一个游戏,你就有一个敌人的对象.这有一些常见的功能,如当前位置,速度,健康状况等.尽管如此,一些敌人可能会以不同的方式移动,可能会播放不同的模具动画,当然,也会有不同的画面.问题是,由于它们具有相同的界面,因此您不需要使用特殊代码来处理每种不同类型的敌人.
用这些字段和空方法创建一个基础"Enemy"类是有意义的,但是然后扩展它以使SmallEnemy,EvilEnemy,BossEnemy等具有不同的模型和动画,填写空白方法.这些"空白"方法也可以称为抽象或纯方法.