Java中抽象类和接口的使用方法

  • Post category:Java

抽象类和接口是Java中两个抽象概念,都可以用来定义规范、约束子类的行为。本文将为您介绍Java中抽象类和接口的使用方法及其注意点。

抽象类

什么是抽象类?

抽象类是在类的声明中包含抽象方法的类,即含有abstract关键字的类。抽象方法是一个没有具体实现的方法声明,它只声明了方法名、参数类型和返回值类型。抽象类一般用于定义规范和约束子类的行为,不能被实例化。

如何定义抽象类?

定义抽象类时,需要在类名前加上abstract关键字,如下所示:

public abstract class AbstractClass {
    //抽象方法
    public abstract void printMessage();
}

如何继承抽象类?

继承抽象类时,必须实现其所有抽象方法,否则需将子类也声明为抽象类。如下所示:

public class SubAbstractClass extends AbstractClass {
    //实现抽象方法
    public void printMessage() {
        System.out.println("Hello World!");
    }
}

注意点

  • 抽象类不能被实例化。
  • 抽象类可以包含非抽象的方法和变量。
  • 抽象方法必须被子类重写或子类也声明为抽象类。

接口

什么是接口?

接口是一种规范,它定义了一组方法和常量,并不能用来描述具体实现。接口中的方法默认为public abstrct,而且不能包含变量。接口是用于实现多态的机制,因为Java是单继承的,但接口却可以实现多重继承。

如何定义接口?

定义接口时,需要使用interface关键字,如下所示:

public interface MyInterface {
    //定义方法
    void methodA();
    void methodB();
}

如何实现接口?

实现接口时,需要使用implements关键字,如下所示:

public class MyClass implements MyInterface {
    //实现接口中的方法
    public void methodA() {
        System.out.println("This is methodA.");
    }
    public void methodB() {
        System.out.println("This is methodB.");
    }
}

注意点

  • 接口中的方法都是抽象方法,默认为public abstract
  • 一个类可以同时实现多个接口。
  • 接口中不能包含变量,只能是public static final的常量。
  • 接口中的方法必须在实现类中被重写。

示例代码

抽象类示例

public abstract class Shape {
    String color;
    public Shape(String color){
        this.color = color;
    }
    public abstract double getArea();
    public abstract String toString();
}

public class Rectangle extends Shape {
    double length;
    double width;
    public Rectangle(double length, double width, String color){
        super(color);
        this.length = length;
        this.width = width;
    }
    public double getArea() {
        return length * width;
    }
    public String toString() {
        return "Rectangle [length=" + length + ", width=" + width + ", color=" + color + "]";
    }
}

public class Circle extends Shape {
    double radius;
    public Circle(double radius, String color){
        super(color);
        this.radius = radius;
    }
    public double getArea() {
        return Math.PI * radius * radius;
    }
    public String toString() {
        return "Circle [radius=" + radius + ", color=" + color + "]";
    }
}

接口示例

public interface Sellable {
    int getPrice();
    String getDescription();
}

public interface Transportable {
    void setWeight(int weight);
    int getWeight();
}

public class Product implements Sellable, Transportable {
    int price;
    int weight;
    String name;
    String description;
    public Product(int price, int weight, String name, String description){
        this.price = price;
        this.weight = weight;
        this.name = name;
        this.description = description;
    }
    public int getPrice() {
        return price;
    }
    public String getDescription() {
        return description;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }
    public int getWeight(){
        return weight;
    }
}

以上是Java中抽象类和接口的使用方法及注意点,希望能对您有所帮助。