我是OOP概念的新手(抽象,封装,继承和多态)。
有人可以使用体育示例解释OOP,例如Sport可以有子类(足球,橄榄球,板球,拳击,斯诺克等)。
运动员管理系统的基本结构也是如此。
非常感谢任何帮助。
非常感谢。
答案 0 :(得分:3)
这是一个非常通用的问题,并不容易准确回答,但这里有一些指针,希望至少可以给你一些关于继承和多态的想法。
Sport
(该类)的实例。这意味着类Football
,Boxing
等都继承自类Sport
。 Sport
中完成的事情可以在Sport
的任何子类中完成,因为它实际上是一项运动。例如,如果Cheer()
,Score()
和win()
被定义为Sport
中的方法,那么每个子类也可以执行这些 - 即继承! Sport
覆盖该方法,并为此提供自己的逻辑。但是,它们仍然必须符合Score()
中设置的方法Sport
的定义,以便它们能够表现为Sport
。这是多态的!Sport
继承而来一个简单的伪代码示例。这可能是非常愚蠢的(在运动方面甚至可能在技术上不正确,但我希望你明白这一点!:))
public class Sport{
public function score(){
print("Scored!");
}
public function Win(){
print("Won!");
}
public function Cheer(){
print("Cheeeeeeeeer!!!");
}
}
public class Soccer Inherits Sport{
public override function score(){
print("One goal!");
}
}
public class Boxing Inherits Sport{
public override function score(){
print("Knockout!");
}
}
// Using the classes:
Sport generalSport = new Sport(); // generalSport is just a non-specific sport
Sport soccerSport = new Soccer(); // soccerSport is a Soccer, but also a Sport!
Sport boxingSport = new Boxing(); // boxingSport is a Boxing, but also a Sport!
generalSport.Win(); // This should output: "Won!" (from Sport)
soccerSport.Win(); // ... "Cheeeeeeeeer!!!" (inherited from Sport)
boxingSport.Cheer() // ... "Cheeeeeeeeer!!!" (inherited from Sport)
generalSport.score(); // "Scored!"
soccerSport.score(); // "One Goal", since it was overridden in Soccer
boxingSport.score() // "Knockout!", since overridden in Boxing
提示:想想现实生活中“有”的东西。如果X继承Y,X可以被定义为X,但它也是Y,并且可以这样处理(只有添加一些额外属性的可能性)。