0

Coming across problems with not being able to to be instantiated even extending and trying to override it does nothing to fix it. Trying with a driver file and 2 other files to print results back. Been stuck for awhile, anything is appreciated at this point.

public abstract class Triangle extends Lot implements Comparable< TestTriangle> {

public abstract double calculateArea();

public abstract String getID();

public int compareTo(LotType1 o) {
    if (calculateArea() > o.calculateArea()) {
        return 1;
    } else if (calculateArea() < o.calculateArea()) {
        return -1;
    } else {
        return 0;
    }
}

@Override 
public String toString() {
    return "Lot ID: " + getID()
            + " Area: " + calculateArea();
}

}

Driver File =====

public class TestLots {

public static void main(String args[]){

Lot[] lots = {new Triangle1("L1",350, 200) {},
              new Triangle2("L2",100,270),
              new Triangle1("L3",100, 270),
              new Triangle2("L4",350,200)
             };


java.util.Arrays.sort(lots);

// print out sorted results
for (Lot lot: lots) {
  System.out.print(lot + " "); 
  System.out.println();
}
SkiProg
  • 1
  • 1
  • Hey! `Triangle` is abstract and therefore you cannot instantiate it. You need to implement `getID` and `calculateArea`. In case you've done that with `Triangle1` and `Triangle2`; please post those classes as well. – akuzminykh Jun 21 '20 at 20:30
  • First, you dont have any class called Triangle1 or TriangleX, and Triangle is an abstract class, why? i preffer to you to remove the abstract and implement all the methods, like calculateArea and getID – Timor Jun 21 '20 at 20:30

2 Answers2

0

An abstract class cannot be initiated. For you needs, first remove the abstract keyword from the class implementation. Then, Create an constructor which get your 3 parameters, implement the 2 methods, calculateArea and getID. Please try to start with this following code

import java.util.Comparator;

public class Triangle implements Comparator<Triangle> {
    private String id;

    public Triangle(String id) {
        this.id = id;
    }


    public double calculateArea() {
        int area = 0;
        //calculate your area
        return area;
    }

    public String getID() {
        return id;

    }

    @Override
    public String toString() {
        return "Triangle ID: " + getID()
                + " Area: " + calculateArea();
    }

    @Override
    public int compare(Triangle t1, Triangle t2) {
        if (t1.calculateArea() > t2.calculateArea()) {
            return 1;
        } else if (t1.calculateArea() < t2.calculateArea()) {
            return -1;
        } else {
            return 0;
        }
    }
}
Timor
  • 499
  • 4
  • 11
0

Java does not allow instantiation of abstract class directly for itself.

Can we instantiate an abstract class?

Create an abstract class called Shape -> it contains an abstract method calculateArea.

Then triangle can extend this class to become an concrete implementation. Then you can instantiate objects from it.