OOPS中的类和绘画关系

时间:2012-05-16 16:39:49

标签: oop

这可能不适合问这个问题,因为它在接受采访时被问到我,但我想了解它背后的oops概念。

有两个基类和一个派生类:

    class Car {}

    class Paint {}

    class Colors : Paint {}

所以问题是什么是面向对象的概念,将Paint作为不同的基类,将Colors作为Paint类的子类。

我的困惑是Paint是一个基类而不是Car类的属性。 OOP的概念在这里应用了什么。

4 个答案:

答案 0 :(得分:4)

这个概念是有些人没有概念。首先,什么是“颜色”(不要命名具有复数名称的类)。 Paint中的什么行为是由Colors继承的?我没看到任何东西。我不知道色彩应该做什么。

颜色可以与Paint互换使用吗?不是我能想象的。刚刚开始,它似乎是一个糟糕的阶级层次结构。

恕我直言,这个问题完全是假的。

答案 1 :(得分:3)

出于某种原因,我想它被描述为:

  

“您有Car班级和Paint班级,Paint班级是   由Colors划分。“

我假设解释它的人并不意味着字面上只有一个名为Colors的类。我想这更像是:

    public class Car
    {
    }

    public abstract class Paint
    {
        public abstract void PaintCar(Car car);
    }

    public class BluePaint : Paint
    {
        public override void PaintCar(Car car)
        {
            // apply blue paint to the car
        }
    }

    public class MatteRedPaint : Paint
    {
        public override void PaintCar(Car car)
        {
            // apply red paint to the car
            // use matte finish
        }
    }

这本身并不是很理想,但比你提出的建议更合理。

答案 2 :(得分:0)

听起来他们正在寻找关键词:继承

颜色继承自Paint,对吧?

虽然如果Paint继承自Color会更有意义。

这可能是寻求与您进行OOP讨论的开放式问题之一。

如果Car HAS-A Paint而不是Car IS-A Paint,那么很可能他们正在寻找策略设计模式:更喜欢组合而不是继承。但是这个例子正在推动它,因为它确实没有意义。

他们可能一直在寻找的最后一件事是与您认为多重继承不好的原因有关的讨论。你认为它不好,对吗? :)

答案 3 :(得分:0)

问题已经在https://softwareengineering.stackexchange.com/questions/160949/why-do-we-need-to-separate-classes-which-have-different-functionality

进行了讨论

以下链接有一个可能的设计,它在OOP中为这些类(Car,Paintshop和paint())举例说明了接口设计。链接:http://www.cs.brown.edu/courses/csci0150/labs/lab3/index.html