2012-05-16 65 views
1

這可能不是正確的地方問這個問題,因爲它在面試時被問到了我,但我想了解它背後的oops概念。OOPS中的班級和繪畫關係

有兩個基類和派生類:

class Car {} 

    class Paint {} 

    class Colors : Paint {} 

所以,問題是什麼是具有漆作爲不同的基類和顏色的子類塗料類背後的面向對象的概念。

我的困惑是Paint是基類而不是Car類的屬性。這裏應用了OOP的概念。

+3

雖然其他人可能會不同意,但我相信這裏應用的「概念」被稱爲「糟糕的設計」。 –

+0

我認爲你的意思是「類和父對象的關係」。 OOPS =「面向對象的編程」。也許你的意思是OOD =「面向對象的設計」。 – Xeoncross

回答

4

這個概念是有些人沒有概念。首先,什麼是「顏色」(不要命名具有複數名稱的類)。 Paint中的哪些行爲是由Colors繼承的?據我所知,沒有什麼。我不知道顏色應該做什麼。

顏色可以與塗料交替使用嗎?不是我能想象的。馬上就好像是一個糟糕的階級階層。

恕我直言,這個問題完全是假的。

+0

我告訴他,這裏的對象定向概念可能是Car類組成Paint類。從汽車中分離塗料類也可以是封裝,因爲單獨的製造商或汽車製造商將擁有他們自己的一套塗料類。但我真的不知道這個設計。 – pmittal

0

聽起來就像他們在尋找關鍵詞:繼承

顏色從Paint繼承,對吧?

雖然如果Paint從Color繼承,它會更有意義。

這可能是那些尋找面向對象討論的開放式問題之一。

如果汽車HAS-A油漆,而不是汽車IS-A油漆,以及可能是他們正在尋找戰略設計模式:更喜歡組合而不是繼承。但是這個例子推動了一點,因爲它沒有意義。

他們可能一直在尋找的最後一件事是討論與您認爲多重繼承不好有關的原因。你認爲它很糟糕,對吧? :)

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 
     } 
    } 

這本身並不是很理想,但比你的問題所提出的要合理得多。