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.
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
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:
Disadvantages:
Abstract class
Can contain specific implementations, which can reduce code redundancy.
Only supports single inheritance.
Define Shape interface:
public interface Shape {
double getArea();
double getPerimeter();
}
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;
}
}
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!