Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Programming With Java ICS 201 Chapter 8 Abstract Class University Of Ha’il 1 Programming With Java ICS 201 Abstract Class An abstract class is a class that has some methods without complete definitions (Abstract Method). Sometimes, it does NOT make sense to create objects from specific classes. In such case, these classes should be created as abstract An abstract class can only be used to derive other classes; you cannot create objects from an abstract class An abstract class must have at least one abstract method 8-2 Programming With Java ICS 201 Abstract Method An abstract method serves as a a method that will be fully descendent class. An abstract complete method heading with the modifier abstract. placeholder for defined in a method has a the addition of It has no method body but does end with a semicolon in place of a method body. public abstract long getSerNumber(); An abstract method cannot be private An abstract class can have any number of abstract and/or fully defined methods Programming With Java ICS 201 Abstract Classes (Cont’d) Attempting to instantiate an object of an abstract class is a compilation error. Example: abstract class Shape { … } Shape sh = new Shape(); Programming With Java ICS 201 Abstract Classes (Cont’d) Failure to implement a superclass’s abstract methods in a subclass is a compilation error unless the subclass is also declared abstract. Example: abstract class Shape { public abstract void drawHere(); } class Rectangle extends Shape { // The method drawHere() is NOT implemented! } Programming With Java ICS 201 UML Inheritance Diagrams for Abstract Classes Programming With Java ICS 201 Creating Abstract Superclass: Employee class abstract superclass Employee earnings is declared abstract No implementation can be given for earnings in the Employee abstract class An array of Employee variables will store references to subclass objects earnings method calls from these variables will call the appropriate version of the earnings method Programming With Java ICS 201 The Employee Class Hierarchy Programming With Java ICS 201 Abstract Class Employee: Outline // Employee abstract superclass. public abstract class Employee { private String firstName; private String lastName; private String socialSecurityNumber; { // three-argument constructor public Employee(String first, String last, String ssn ) firstName = first; lastName = last; socialSecurityNumber = ssn; } // end three-argument Employee constructor Programming With Java ICS 201 Abstract Class Employee: Outline (Cont’d) public void setFirstName(String first) { firstName = first; public String getFirstName() { return firstName; } public void setLastName( String last ) { lastName = last; public String getLastName() { return lastName; } public void setSocialSecurityNumber( String ssn ) { socialSecurityNumber = ssn; } public String getSocialSecurityNumber() return socialSecurityNumber; { } public abstract double earnings(); // no implementation here } // end abstract class Employee } } Programming With Java ICS 201 Extending Concrete Classes public class SalariedEmployee extends Employee { private double weeklySalary; … // calculate earnings; override abstract method earnings in Employee public double earnings() { return getWeeklySalary(); } // end method earnings … } Programming With Java ICS 201 Extending Concrete Classes (Cont’d) public class CommissionEmployee extends Employee { private double grossSales; // gross weekly sales private double commissionRate; // commission percentage… // calculate earnings; override abstract method earnings in Employee public double earnings() { return getCommissionRate() * getGrossSales(); } // end method earnings … } Programming With Java ICS 201 Extending Concrete Classes (Cont’d) public class HourlyEmployee extends Employee { private double wage; // wage per hour private double hours; // hours worked for week // calculate earnings; override abstract method earnings in Employee public double earnings() { if ( getHours() <= 40 ) // no overtime return getWage() * getHours(); else return 40 * getWage() + ( getHours() - 40 ) * getWage() * 1.5; } // end method earnings Implementing an Abstract Method Define the speak() method as abstract in the superclass Animal. Programming With Java ICS 201 public abstract class Animal { protected String kind; // Cow, pig, cat, etc. public Animal() { } public String toString() { return "I am a " + kind + " and I go " + speak(); } public abstract String speak();/ • Implement Abstract method speak() differently in each subclass. } public class Cat extends Animal {public class Cow extends Animal { public Cat() { public Cow() { kind = "cat"; kind = "cow"; } } public String speak() { public String speak() { return "meow"; return "moo"; } } } }