代码之家  ›  专栏  ›  技术社区  ›  Lapo pfalcon

Java类和子类逻辑

  •  0
  • Lapo pfalcon  · 技术社区  · 8 年前

    我正在学习Java类,我想到了这个例子:

    比如说,我正在开发一个可以创造汽车的应用程序。每辆车都由一些部件组成(发动机、轮胎等)每个部件在某些方面都会给汽车带来助力(例如,发动机会加速)。

    为了发展这一点,我想我可以建立一个“汽车”类,它有一些变量来保存汽车配备的部件。然后,我创建了一个基类“Components”,它保存所有组件的公共特性(它们的重量、大小……)和一些通用函数。然后,我创建了“Components”类的一些子类,这些子类定义了一个特定的组件(例如,我创建了“Engines”或“Tyres”类)。 当然,每个发动机可以是不同品牌的(宝马、奥迪等)而且每个品牌都有不同的特点(比如说奥迪的发动机比宝马的加速更快)。

    现在的问题是,我是否必须为每个品牌引擎创建不同的子类?我当然可以,但是 这是建造这种“结构”的正确方法吗?

    例如,如果在构建所有类之后,我注意到我必须为所有引擎添加另一个特性(例如最大速度),我必须更改每个特定品牌引擎的所有子类,但这听起来不是很“有效”。

    4 回复  |  直到 8 年前
        1
  •  1
  •   mad.meesh    8 年前

    你在正确的轨道上,但你遇到了所有设计师都面临的决策,没有明确的答案。

    但要扩展,您可以具体定义 behaviours .. 例如,可以从基类开始 car . 然后您可以定义一个接口,例如:

    interface driveable
    {
         void drive(engine type_of_engine, tire type_of_tire);
    }
    
    interface moddable
    {
        void tune(exhuast type_of_exhaust);
    }
    

    然后使用 汽车 :

    class car : driveable
    {
        void drive(...)
    }
    
    class bmw : car {...}
    class audi : car, moddable {...}
    
        2
  •  0
  •   jingx    8 年前

    如果差异可以用同一数据属性的不同值表示,则 需要不同的代码路径来处理这些值,那么就不需要为它们提供单独的子类。

    例如,如果您正在计算0-60,您将有一个通用公式,您可以在其中插入特定发动机的加速度参数。没有必要单独 AudiEngine BMWEngine 课程。

    奥托,如果奥迪的引擎具有使汽车隐形的附加功能,那么你确实需要一个特殊的 AudiEngine公司 类,具有特殊 enableInvisibility() 方法。

    经验法则:如果你发现自己在写作 if/else 检查对象类型并相应地执行不同操作的块,需要子类。

        3
  •  0
  •   Timothy Truckle Vincent Boutot    8 年前

    “经验法则”是:如果有不同的类,则需要单独的类 行为 .

    发动机具有不同的 行为 比a 轮胎 ,但 奥迪发动机 具有与 宝马发动机 ,只是 所有物 “加速度量”不同,这是 配置 ,而不是行为。

        4
  •  0
  •   PatrycjaMirko    8 年前

    我认为可以使用多态性和继承。例如,您创建了一类SLNIC—每个SLNIC都有相同的变量(品牌、功率等)。然后,在调用类构造函数时,可以初始化变量(将它们指定为“BMW”,130等) 这完全取决于应用程序的工作方式。 如果这不是您想要的答案,请指定问题,我将尽力提供帮助。

    推荐文章