Java8接口和抽象类和方法
4

在 Java 8 中,接口和抽象类都是用于实现抽象和多态性的重要工具。它们允许定义一个规范(方法签名),而具体的实现则由子类完成。

接口 (Interface)

接口就像一个契约,规定了实现它的类必须提供哪些方法。

特点:

  • 只能包含抽象方法 (Java 8 之前) 和 默认方法 (Java 8 开始) 以及 静态方法 (Java 8 开始)。
  • 可以包含常量,默认是 public static final 的。
  • 不能被实例化。
  • 一个类可以实现多个接口

用途:

  • 定义规范和契约,提高代码的灵活性和可扩展性。
  • 实现多态性,允许不同类型的对象以相同的方式处理。
  • 模拟多重继承。

例子:

// 定义一个接口
interface Drawable {
    void draw(); // 抽象方法
    default void resize() { // 默认方法
        System.out.println("Resizing the shape.");
    }
}

// 实现接口的类
class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a circle.");
    }
}

抽象类 (Abstract Class)

抽象类是一个不能被实例化的类,它可以包含抽象方法具体方法

特点:

  • 可以包含抽象方法具体方法
  • 可以包含成员变量
  • 不能被实例化。
  • 一个类只能继承一个抽象类

用途:

  • 为子类提供通用的方法实现。
  • 定义抽象方法,强制子类实现特定的功能。

例子:

// 定义一个抽象类
abstract class Shape {
    String color;

    public Shape(String color) {
        this.color = color;
    }

    public abstract void draw(); // 抽象方法

    public void fill() { // 具体方法
        System.out.println("Filling the shape with color " + color);
    }
}

// 继承抽象类的子类
class Rectangle extends Shape {
    public Rectangle(String color) {
        super(color);
    }

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

区别

特性 接口 抽象类
方法 只能包含抽象方法、默认方法和静态方法 可以包含抽象方法和具体方法
变量 只能包含常量 可以包含成员变量
构造方法 没有 可以有
继承 可以实现多个接口 只能继承一个抽象类
实例化 不能被实例化 不能被实例化

如何选择

  • 优先使用接口,因为它提供了更大的灵活性。
  • 当需要为子类提供通用的方法实现时,使用抽象类。
  • 当需要表示一种抽象概念,并且不需要为子类提供任何实现时,使用接口。

方法

在 Java 中,方法是类的核心组成部分,用于定义对象的行为。Java 提供了多种方法类型,以满足不同的编程需求。以下是抽象方法、默认方法、普通方法和静态方法之间的区别:

1. 抽象方法 (Abstract Method)

  • 定义: 只有方法声明,没有方法体的方法。

  • 关键字: abstract

  • 位置: 只能存在于抽象类或接口中。

  • 目的: 定义子类必须实现的通用方法,确保所有子类都具有特定行为。

  • 示例:

    abstract class Animal {
        public abstract void makeSound(); // 抽象方法,没有方法体
    }
    

2. 默认方法 (Default Method)

  • 定义: 在接口中提供默认实现的方法,使用 default 关键字修饰。

  • 关键字: default

  • 位置: 只能存在于接口中。

  • 目的:

    • 扩展接口功能,而无需修改现有实现类。
    • 解决接口演化问题,避免因新增方法而导致大量类需要修改。
  • 示例:

    interface Drawable {
        void draw(); 
        default void resize() { // 默认方法,提供默认实现
            System.out.println("Resizing the shape.");
        }
    }
    

3. 普通方法 (Instance Method)

  • 定义: 类中定义的非静态方法,需要通过对象实例调用。

  • 关键字: 无特定关键字。

  • 位置: 类中。

  • 目的: 定义对象的实例行为,依赖于对象的具体状态。

  • 示例:

    class Circle {
        int radius;
    
        public double calculateArea() { // 普通方法,需要对象实例调用
            return Math.PI * radius * radius;
        }
    }
    

4. 静态方法 (Static Method)

  • 定义: 使用 static 关键字修饰的方法,属于类本身,不依赖于对象实例。

  • 关键字: static

  • 位置: 类中。

  • 目的:

    • 提供工具类功能,例如数学计算、字符串操作等。
    • 定义与对象实例无关的操作。
  • 示例:

    class MathUtils {
        public static int sum(int a, int b) { // 静态方法,属于MathUtils类
            return a + b;
        }
    }
    

总结:

特性 抽象方法 默认方法 普通方法 静态方法
关键字 abstract default static
方法体
所属 抽象类/接口 接口
调用方式 子类必须实现 实现类可继承或重写 对象实例调用 类名调用
目的 定义通用方法规范 扩展接口功能 定义对象实例行为 提供工具类功能/与实例无关的操作
Java8接口和抽象类和方法
http://152.53.84.24:8090/archives/java8jie-kou-he-chou-xiang-lei-he-fang-fa
作者
Administrator
发布于
更新于
许可