2015-03-25 85 views
-6

爲什麼我不能從GeometricObject類調​​用這些方法?GeometricObject和circle類

public abstract class GeometricObject { 
    private String color = "white"; 
    private boolean filled; 
    private java.util.Date dateCreated; 

    /** Construct a default geometric object */ 
    protected GeometricObject() { 
     dateCreated = new java.util.Date(); 
    } 

    /** Construct a geometric object with color and filled value */ 
    protected GeometricObject(String color, boolean filled) { 
     dateCreated = new java.util.Date(); 
     this.color = color; 
     this.filled = filled; 
    } 

    /** Return color */ 
    public String getColor() { 
     return color; 
    } 

    /** Set a new color */ 
    public void setColor(String color) { 
     this.color = color; 
    } 

    /** Return filled. Since filled is boolean, 
    * the get method is named isFilled */ 
    public boolean isFilled() { 
     return filled; 
    } 

    /** Set a new filled */ 
    public void setFilled(boolean filled) { 
     this.filled = filled; 
    } 

    /** Get dateCreated */ 
    public java.util.Date getDateCreated() { 
     return dateCreated; 
    } 

    @Override 
    public String toString() { 
     return "created on " + dateCreated + "\ncolor: " + color + 
      " and filled: " + filled; 
    } 

    /** Abstract method getArea */ 
    public abstract double getArea(); 

    /** Abstract method getPerimeter */ 
    public abstract double getPerimeter(); 
} 
+2

不要插入鏈接。在這裏發佈您的問題的所有相關信息。 – 2015-03-25 00:29:10

回答

0

如果你的意思是你爲什麼不能調用getArea()getPerimeter()方法,這是因爲它們都是抽象的。

您不能調用抽象方法。抽象方法必須在具體類中有一個實現。

此外,您不能實例化一個接口或抽象類。你只能實例化具體類(並且它們可以實現一個接口或者擴展一個抽象類)。

因此,要使用getArea()getPerimeter()方法,您需要一個實現它們的具體類。如類可能是這個樣子:

public class ConcreteGeometricObject extends GeometricObject { 

    public ConcreteGeometricObject() { 
     super(); 
    } 

    public ConcreteGeometricObject(String color, boolean filled) { 
     super(color, filled); 
    } 

    @Override 
    public double getArea() { 
     double area; 
     //implementation code here 
     return area; 
    } 

    @Override 
    public double getPerimeter() { 
     double perimeter; 
     //implementation code here 
     return perimeter; 
    } 
} 

而且你可以使用它的方式像這樣:

GeometricObject geometricObject = new ConcreteGeometricObject(); 
//... 
double area = geometricObject.getArea(); 
double perimeter = geometricObject.getPerimeter() 

請仔細閱讀這條古道:Lesson: Interfaces and Inheritance

+0

謝謝你的信息 – 2015-03-25 15:05:39