Java knowledge points丨What is the role of Java abstract classes?

The role of a Java abstract class is to define a set of common behaviors and attributes of related classes, and enforce subclasses to implement specific behaviors through abstract methods. The following is a detailed discussion of several main functions of Java abstract classes:

1. Define general behavior:

Abstract classes can be used to define the common behavior of a group of related classes. Through the abstract class, these common behaviors can be abstracted as methods and implemented in the abstract class. After the subclass inherits the abstract class, these common methods can be directly used without writing the same code repeatedly.

For example, suppose we have a set of shape classes including circle, rectangle, and triangle. These shape classes all have methods for calculating area and perimeter. We can define an abstract class Shapethat contains abstract methods for calculating area and perimeter, and then let these shape classes inherit Shapeclasses and implement these abstract methods. This way, we can define common behavior in the abstract class and avoid repeating the logic of calculating area and perimeter in each shape class.

2. Force subclasses to implement specific behaviors:

An abstract class can contain abstract methods, which have no concrete implementation. Subclasses must implement these abstract methods, otherwise subclasses must also be declared abstract. Through the existence of abstract methods, abstract classes can force their subclasses to implement specific behaviors and ensure that subclasses have certain necessary functions.

ShapeContinuing the example of the shape class above, an abstract method can be defined in the abstract class calculateArea(), and subclasses are required to implement this method to calculate the area of ​​the shape. In this way, whether it is a circle, rectangle or triangle, you must implement your own calculateArea()method to ensure that each shape class has the function of calculating the area.

3. Realize polymorphism:

Abstract class is one of the important mechanisms to realize polymorphism. Parameter polymorphism and return value polymorphism of methods can be realized by using abstract classes as parameter types or return types. This can make the program more flexible and be able to handle the unified interface of different subclass objects.

Suppose we have a GraphicsUtilities class with a method draw(Shape shape)for drawing shapes. ShapeA class is an abstract class that has multiple subclasses such as Circle, , Rectangleand Triangle. By using Shapea class as a parameter type, you can accept an object of any shape as a parameter and call its corresponding method. In this way, when calling draw()a method, different subclass objects can be passed in to achieve the effect of polymorphism.

abstract class Shape {
    public abstract void draw();
}

class Circle extends Shape {
    public
       @Override
       public void draw() {
           System.out.println("Drawing a circle");
       }
   }

   class Rectangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing a rectangle");
       }
   }

   class Triangle extends Shape {
       @Override
       public void draw() {
           System.out.println("Drawing a triangle");
       }
   }

   public class GraphicsTool {
       public void draw(Shape shape) {
           shape.draw();
       }
   }

   public class Main {
       public static void main(String[] args) {
           GraphicsTool tool = new GraphicsTool();

           Shape circle = new Circle();
           Shape rectangle = new Rectangle();
           Shape triangle = new Triangle();

           tool.draw(circle);      // 输出:Drawing a circle
           tool.draw(rectangle);   // 输出:Drawing a rectangle
           tool.draw(triangle);    // 输出:Drawing a triangle
       }
   }

In the above example, Shapethe class is abstract and it defines an abstract method draw(). Circle, Rectangleand Triangleare Shapesubclasses of the class, and they implement draw()methods respectively. GraphicsToolA class has a draw()method that takes a Shapetype parameter and calls its draw()method. In Mainthe class, we create different shape objects and draw them using the methods GraphicsToolof the class . draw()By passing different subclass objects into draw()the method, the effect of polymorphism is achieved.

4. Provide a template method:

Abstract classes can define template methods that provide the skeleton of an algorithm but allow subclasses to implement specific steps as needed. Template methods are very common in design patterns, which provide a standard method implementation and allow subclasses to customize according to actual conditions.

For example, suppose we have a game development framework with an abstract class Gamethat defines the basic logic flow of the game. GameThere is a template method in the class play(), which defines the overall flow of the game, including steps such as initialization, starting the game, updating state, and ending the game. These steps can be implemented in abstract classes, but the specific implementation details can be left to subclasses to implement.

abstract class Game {
    public final void play() {
        initialize();
        startGame();
        update();
        endGame();
    }

    public abstract void initialize();
    public abstract void startGame();
    public abstract void update();
    public abstract void endGame();
}

class Chess extends Game {
    @Override
    public void initialize() {
        System.out.println("Initializing chess game");
    }

    @Override
    public void startGame() {
        System.out.println("Starting chess game");
    }

    @Override
    public void update() {
        System.out.println("Updating chess game");
    }

    @Override
    public void endGame() {
        System.out.println("Ending chess game");
    }
}

class Poker extends Game {
    @Override
    public void initialize() {
        System.out.println("Initializing poker game");
       }

       @Override
       public void startGame() {
           System.out.println("Starting poker game");
       }

       @Override
       public void update() {
           System.out.println("Updating poker game");
       }

       @Override
       public void endGame() {
           System.out.println("Ending poker game");
       }
   }

   public class Main {
       public static void main(String[] args) {
           Game chess = new Chess();
           Game poker = new Poker();

           chess.play();
           // 输出:
           // Initializing chess game
           // Starting chess game
           // Updating chess game
           // Ending chess game

           poker.play();
           // 输出:
           // Initializing poker game
           // Starting poker game
           // Updating poker game
           // Ending poker game
       }
   }

In the above example, Gamethe class is an abstract class that defines the basic logic flow of the game and provides a template method play(). Chessand Pokerare Gamesubclasses of the class, which respectively implement abstract methods and concretely implement the logic of initialization, starting the game, updating the state, and ending the game. In Mainthe class, we create Chessand Pokerobjects, and call their play()methods to realize the flow of the game. By using the template method, the abstract class provides a standard method implementation framework and allows subclasses to customize the implementation according to specific needs.

The above is a detailed discussion of the role of Java abstract classes, and illustrates the application scenarios and usage of abstract classes in actual programming through sample codes. Abstract classes play an important role in object-oriented programming, providing functions such as code reuse, mandatory subclass implementation, polymorphism, and template methods to help improve code maintainability, scalability, and flexibility.

Dark Horse Programmer Java Zero-Basic Video Tutorial_Part 1 (Introduction to Java, including Stanford University practice questions + Likou algorithm questions and Dachang java interview questions)

Dark Horse Programmer Java Zero-Basic Video Tutorial_Part 2 (Introduction to Java, including Stanford University practice questions + Likou algorithm questions and Dachang java interview questions)

Guess you like

Origin blog.csdn.net/Itmastergo/article/details/132618848