有人可以使用SPORT示例解释OOP吗?

时间:2013-01-04 09:17:48

标签: oop inheritance programming-languages polymorphism

我是OOP概念的新手(抽象,封装,继承和多态)。

有人可以使用体育示例解释OOP,例如Sport可以有子类(足球,橄榄球,板球,拳击,斯诺克等)。

运动员管理系统的基本结构也是如此。

非常感谢任何帮助。

非常感谢。

1 个答案:

答案 0 :(得分:3)

这是一个非常通用的问题,并不容易准确回答,但这里有一些指针,希望至少可以给你一些关于继承和多态的想法。

  • 所有体育(概念)实际上都是Sport(该类)的实例。这意味着类FootballBoxing等都继承自类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,并且可以这样处理(只有添加一些额外属性的可能性)。