2

I made a java interface called Polygon, it contains various abstract methods like getArea() and getNVertices(). It will be implemented by subclasses such as Triangle, Quadrilateral etc. which in turn are extended (e.g., Quadrilateral is extended by Rectangle).

Now each Polygon will be defined by a number of vertices (I put them in an array of Vertex, which contains the x and y coordinates). As each Polygon will use this array, I'm wondering: is it possible to define an array of Vertex in the interface Polygon? How do I do this?

2
  • 4
    Your requirements sound more appropriate for an abstract class than an interface. Commented May 21, 2015 at 16:10
  • You can not define a attribute into a interface. However, you can use abtract class Commented May 21, 2015 at 16:12

5 Answers 5

4

A common practice in this case is to write both an interface and an abstract class.

The interface defines the contract of the polygon, while the abstract class contains the default implementation - which can include attributes like an array of vertices, and any methods you want to have default implementation for.

So you will have something like:

public interface Polygon { ... }

And in another file

public abstract class BasePolygonImpl implements Polygon {

    protected Vertex[] vertices;

    // ...
}

The reason for this is that if a person wants to create a Polygon which is implemented in a different way (for example, has a linked list of vertices or keeps its vertices in a database), they can create a class that implements Polygon and ignores the BasePolygonImpl class.

But if they want to implement a polygon which extends rather than replaces the default implementation, they can decide to use BasePolygonImpl as their superclass, and so to avoid repeating the base implementation.

The important point to notice is that interfaces do not define implementation, thus cannot include fields other than constants. Only classes can define implementation.

Sign up to request clarification or add additional context in comments.

Comments

4

You cannot define variables (attributes are going to be static and final) inside an interface. Your solution would be implementing it by an abstract class.

Comments

1

Java interfaces cannot have instance variables. If having them seems really appropriate to you, perhaps you should consider using an abstract class instead (or in addition) to an interface.

Comments

0

All variable inside an interface are public static final ,

if you put the vertex[] in Polygon interface only one instance of Vertex will be created for all the instance of triangle, Quadrilateral.

you could add vertex[] is all your sub-classes(triangle,etc) then declare getters and setters of Vertex[] in the Polygon interface. or you could use abstract class as other friend mentioned above.

Comments

0

Alternate suggestion: If every Polygon is required to have a list of Vertex, then you could define an interface method:

List<Vertex> getVertices();

If your Polygons are immutable, which would be a wise idea, then you could recommend Polygon implementors to return a com.google.common.collect.ImmutableList or something like.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.