Home >Java >javaTutorial >Similarities, differences, advantages and disadvantages of interfaces and abstract classes in Java

Similarities, differences, advantages and disadvantages of interfaces and abstract classes in Java

WBOY
WBOYOriginal
2024-05-01 09:45:02548browse

Interfaces and abstract classes are both mechanisms for defining contracts between classes, but interfaces can have multiple inheritance and only contain abstract methods, while abstract classes only support single inheritance and can contain both concrete methods and properties. Interfaces pay more attention to contract definition and promote code reuse; abstract classes provide partial inheritance to reduce redundancy, but when changing abstract classes, subclasses must be modified simultaneously. In actual combat, the Shape interface defines a method for obtaining the area and perimeter of graphics; the abstract class Square implements area calculation, and its concrete subclass SpecificSquare implements perimeter calculation.

接口和抽象类在 Java 中的异同与优缺点

The similarities, differences, advantages and disadvantages of interfaces and abstract classes in Java

In Java, both interfaces and abstract classes are used A mechanism for defining contracts between classes. There are both similarities and significant differences between the two.

Similarities

  • Neither interfaces nor abstract classes can be instantiated.
  • They all contain method declarations, but no implementations.
  • Subclasses must implement the interface or extend all abstract methods in the abstract class.

Difference

Features Interface Abstract class
Access modifier The default is public Can be public, protected or default
Inheritance Can inherit multiple interfaces Can only inherit one abstract class
Implementation can only contain abstract methods Can contain abstract methods and concrete methods
Attributes Can only contain static and final constants Can contain attributes and Method
Instantiation Cannot be instantiated Cannot be instantiated
Instance method Can only contain abstract methods Can contain both abstract methods and concrete methods

##Advantages and Disadvantages

Interface

  • Advantages:

      Provides a common contract for multiple implementations.
    • Promote code reuse and modularization.
    • Support multiple inheritance.
  • Disadvantages:

      cannot contain specific implementations.
    • Subclasses must explicitly implement all interface methods.

Abstract class

  • ##Advantages:

    Can contain specific implementations, which can reduce code redundancy.
    • Provides an intermediate option between interfaces and concrete classes.
    • Supports partial inheritance, allowing subclasses to choose which methods to implement.
  • Disadvantages:

    Only supports single inheritance.
    • If you change the abstract class, you need to change all subclasses.
Practical case

Define Shape interface:

public interface Shape {
    double getArea();
    double getPerimeter();
}

Create Square's abstract and concrete classes:

public abstract class Square implements Shape {

    protected double side;

    public Square(double side) {
        this.side = side;
    }

    @Override
    public double getArea() {
        return side * side;
    }
}

public class SpecificSquare extends Square {

    public SpecificSquare(double side) {
        super(side);
    }

    @Override
    public double getPerimeter() {
        return 4 * side;
    }
}

Use the Square interface:

Shape shape = new SpecificSquare(5.0);
double area = shape.getArea();
double perimeter = shape.getPerimeter();

The above is the detailed content of Similarities, differences, advantages and disadvantages of interfaces and abstract classes in Java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn