public interface Scalarable { double scalarProduct(Point2D p); } public abstract class Point implements Scalarable { public Point() { } public String toString() { return "Some point. "; } } public class Point2D extends Point { double x; double y; public Point2D(double x, double y) { super(); this.x = x; this.y = y; } public String toString() { return super.toString() + "2D point. X - " + x + " Y - " + y; } @Override public double scalarProduct(Point2D p) { return Math.sqrt(x * p.x + y * p.y); } }