java:abstract_classes

Abstract Κλάσεις

Μέχρι τώρα γνωρίσαμε κλάσεις που αποτελούν σχέδια αντικειμένων. Εκτός από τις κλάσεις αυτές, η Java επιτρέπει ορισμό κλάσεων οι οποίες είναι πιο γενικές και δεν μπορούν να υλοποιήσουν απευθείας αντικείμενα. Αν και οι συγκεκριμένες κλάσεις δεν μπορούν να παράγουν αντικείμενα μπορούν να έχουν υποκλάσεις οι οποίες παράγουν αντικείμενα. Οι κλάσεις αυτές έχουν τον προσδιοριστή abstract μπροστά από το όνομα της κλάσης ως εξής:

GraphicObject.java
public abstract class GraphicObject {
   // declare fields
   // declare nonabstract methods
   abstract void draw();
}

Μία abstract κλάση μπορεί να έχει “κανονικές” μεθόδους ή abstract μεθόδους ή συνδυασμό των παραπάνω. Με τον όρο abstract method εννοούμε μία μέθοδο της οποίας ορίζεται μόνο το prototype αλλά δεν ορίζεται η υλοποίηση. Η υλοποίηση της θα οριστεί σε κάποια υποκλάση της συγκεκριμένης abstract κλάσης. Επίσης, από μία abstract κλάση μπορεί να οριστεί μία υποκλάση που και εκείνη να είναι abstract.

Δείτε το παρακάτω παράδειγμα ορισμού μιας abstract κλάσης

Employee.java
public abstract class Employee
{
   private String name;
   private String address;
   private int id;
   public Employee(String name, String address, int id) {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.id = id;
   } 
 
   public abstract int computeSalary();
 
   public String toString() {
      return name + " " + address + " " + id;
   }
   public String getName() {
      return name;
   }
   public String getAddress() {
      return address;
   }
   public void setAddress(String newAddress) {
      address = newAddress;
   }
   public int getNumber(){
     return id;
   }
}
Secretary.java
public class Secretary extends Employee {
   int salary;
   public Secretary(String name, String address, int id, int monthly_salary) {
      super(name, address, id);
      salary = monthly_salary;
   }
   public int computeSalary() {
      return salary;
   }
   public String toString() {
      return super.toString() + " " + salary;
   }
}
java/abstract_classes.txt · Last modified: 2019/03/23 05:00 by gthanos