2015-03-25 80 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