2016-04-03 110 views
-1

我有3個類,我有一個方法在我的矩形類,檢查如果高度和寬度是相同的長度,但是,如果我在我的三角類設置高度和寬度,並繼承我的三角類它說,矩形isSquare()方法爲true,因爲它使用默認值0.0和0.0。它如何不繼承我在三角類中分配的內容?在Java中繼承類變量值?

class inheritence { 
    private double width; 
    private double height; 
    public void setHeight(double height){ 
     this.height=height; 
    } 
    public double getHeight(){ 
     return height; 
    } 
    public void setWidth(double width){ 
     this.width=width; 
    } 
    public double getWidth(){ 
     return width; 
    } 
    void showDim(){ 
     System.out.println("Width and height are "+width+" and "+height); 
    } 
} 

class Triangle extends inheritence{ 
    String style; 
    double area(){ 
     return getHeight()* getWidth(); 
    } 
    void showStyle(){ 
     System.out.println("Triangle is "+style); 
    } 
} 

public class Rectangle extends Triangle{ 
    boolean isSquare(){ 
     if(getWidth()==getHeight()){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
    public double area(){ 
     return getWidth()*getHeight(); 
    } 
} 

public class Driver { 
    public static void main(String[]args){ 
     Triangle t1=new Triangle(); 
     Triangle t2=new Triangle(); 
     Rectangle rect=new Rectangle(); 
     t1.setHeight(10); 
     t1.setWidth(20); 
     if(rect.isSquare()){ 
      System.out.println("Its a square!"); 
     }else{ 
      System.out.println("Its not a square"); 
     } 

     System.out.println(t1.getHeight()); 
     System.out.println(t1.getWidth()); 
     t1.showDim(); 
     System.out.println("The area for t1 is "+t1.area()); 
     t1.style="Outlined"; 
     t1.showStyle(); 
    } 
} 
+0

它最初應該是真實的。一旦你改變了寬度和高度屬性,那麼它可能會有所不同。而矩形不是一種三角形,所以這不是一個非常好的分類結構。 – ManoDestra

+4

...一個矩形肯定不是一個三角形,所以你的繼承結構是錯誤的(和形狀傳統上反正是有問題的)。而且,三角形的面積無論如何都是錯誤的。 –

+0

大聲笑,我知道這是可怕的分類結構,但我想知道爲什麼它不會工作 – Eli

回答

3

您設置widthheightTriangle類(t1)的實例,但撥打檢查rect.isSquare()上不同的實例(這恰好是一個Rectangle),而您沒有設置widthheight,所以他們仍然爲0。

widthheight成員是實例成員(他們是不是靜態的),這意味着你的class inheritence類的每個實例對它們都有不同的值,所以在一個實例中設置它們不會影響其他實例中的值。

1

您正在設置t1對象的高度和寬度,而不是rect對象。 如果你將其設置爲RECT對象,則輸出將顯示Its not a square

rect.setHeight(10); 
    rect.setWidth(20); 

既然你繼承值,你基本上不需要單獨的三角對象實例的工作。您可以簡單地使用1個對象,即rect

+0

因此,繼承它不會繼承對象的值? – Eli

+0

由於您按照OOP的繼承原則繼承屬性,因此基本上不需要單獨的三角形對象實例('t1'或't2')來處理。你可以簡單地使用1個對象(即'rect'),因爲'rect'是'Rectangle'的一個對象實例,它將繼承'Triangle'和'Triangle'的屬性inturn,從繼承類繼承高度和寬度。 –