Design a console application that will print an estate agent property sale commission report. Use

an abstract class named EstateAgent that contains variables to store the estate agent's name and
property price. Create a constructor accepting the estate agent's name and property price as
parameters. In this class, also create get methods to get the estate agent name, property price
and estate agent commission. The agent commission is calculated at 20% of the property sale
price. The EstateAgent class must implement an iEstateAgent interface that contains the
following:
public interface iEstateAgent
{
String getAgentName();
double getPropertyPrice();
double getAgentCommission();
}
Create a subclass called EstateAgentSales that extends the EstateAgent class. The
EstateAgentSales class must contain a constructor to accept the estate agent name and the
property sale amount as parameters. Write code for the printPropertyReport method, which
prints the estate agent name, property sale price and the estate agent commission amount.
Finally, write a RunApplication class to instantiate the EstateAgentSales class.

Sample screenshot:
Enter the current estate agent name: Joe Bloggers
Enter the property price: 1200000

Estate Agent Report
************************
ESTATE AGENT NAME: Joe Bloggers
PROPERTY PRICE: R1200000.0
AGENT COMISSION: R240000.0

in java

import java.util.Scanner;

public abstract class EstateAgent implements iEstateAgent {
private String agentName;
private double propertyPrice;

public EstateAgent(String agentName, double propertyPrice) {
this.agentName = agentName;
this.propertyPrice = propertyPrice;
}

@Override
public String getAgentName() {
return agentName;
}

@Override
public double getPropertyPrice() {
return propertyPrice;
}

@Override
public double getAgentCommission() {
return propertyPrice * 0.2;
}
}

public class EstateAgentSales extends EstateAgent {
public EstateAgentSales(String agentName, double propertySaleAmount) {
super(agentName, propertySaleAmount);
}

public void printPropertyReport() {
System.out.println("Estate Agent Report");
System.out.println("************************");
System.out.println("ESTATE AGENT NAME: " + getAgentName());
System.out.println("PROPERTY PRICE: R" + getPropertyPrice());
System.out.println("AGENT COMMISSION: R" + getAgentCommission());
}
}

public class RunApplication {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("Enter the current estate agent name: ");
String agentName = scanner.nextLine();

System.out.print("Enter the property price: ");
double propertyPrice = scanner.nextDouble();

EstateAgentSales estateAgentSales = new EstateAgentSales(agentName, propertyPrice);
estateAgentSales.printPropertyReport();
}
}

Here's the implementation of the console application in Java:

```java
import java.util.Scanner;

interface iEstateAgent {
String getAgentName();
double getPropertyPrice();
double getAgentCommission();
}

abstract class EstateAgent implements iEstateAgent {
private String agentName;
private double propertyPrice;

public EstateAgent(String agentName, double propertyPrice) {
this.agentName = agentName;
this.propertyPrice = propertyPrice;
}

public String getAgentName() {
return agentName;
}

public double getPropertyPrice() {
return propertyPrice;
}

public double getAgentCommission() {
return propertyPrice * 0.20;
}
}

class EstateAgentSales extends EstateAgent {
public EstateAgentSales(String agentName, double propertySaleAmount) {
super(agentName, propertySaleAmount);
}

public void printPropertyReport() {
System.out.println("Estate Agent Report");
System.out.println("************************");
System.out.println("ESTATE AGENT NAME: " + getAgentName());
System.out.println("PROPERTY PRICE: R" + getPropertyPrice());
System.out.println("AGENT COMMISSION: R" + getAgentCommission());
}
}

public class RunApplication {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("Enter the current estate agent name: ");
String agentName = scanner.nextLine();

System.out.print("Enter the property price: ");
double propertyPrice = scanner.nextDouble();

EstateAgentSales agentSales = new EstateAgentSales(agentName, propertyPrice);
agentSales.printPropertyReport();

scanner.close();
}
}
```

You can run this code to get the desired output as shown in the sample screenshot.

Sure, here's an implementation of the console application in Java:

```java
import java.util.Scanner;

// Abstract class that implements iEstateAgent interface
abstract class EstateAgent implements iEstateAgent {
private String agentName;
private double propertyPrice;

EstateAgent(String agentName, double propertyPrice) {
this.agentName = agentName;
this.propertyPrice = propertyPrice;
}

public String getAgentName() {
return agentName;
}

public double getPropertyPrice() {
return propertyPrice;
}

public double getAgentCommission() {
return propertyPrice * 0.20; // Calculating agent commission as 20% of property price
}
}

// Subclass that extends EstateAgent
class EstateAgentSales extends EstateAgent {
EstateAgentSales(String agentName, double propertyPrice) {
super(agentName, propertyPrice);
}

public void printPropertyReport() {
System.out.println("Estate Agent Report");
System.out.println("************************");
System.out.println("ESTATE AGENT NAME: " + getAgentName());
System.out.println("PROPERTY PRICE: R" + getPropertyPrice());
System.out.println("AGENT COMMISSION: R" + getAgentCommission());
}
}

// Interface definition
interface iEstateAgent {
String getAgentName();
double getPropertyPrice();
double getAgentCommission();
}

// Main class to run the application
public class RunApplication {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.print("Enter the current estate agent name: ");
String agentName = scanner.nextLine();

System.out.print("Enter the property price: ");
double propertyPrice = scanner.nextDouble();

EstateAgentSales agent = new EstateAgentSales(agentName, propertyPrice);
agent.printPropertyReport();

scanner.close();
}
}
```

This application creates an instance of the `EstateAgentSales` class, taking the estate agent name and property price as input. It then calls the `printPropertyReport` method to display the estate agent name, property sale price, and the estate agent commission.

To run this program, copy the code into a Java file (e.g., `EstateAgentApplication.java`) and compile and execute it using a Java compiler.

Please note that the calculations assume the currency is in "R" (Rand), as mentioned in the sample screenshot. You can modify the currency symbol as per your requirements.