侧边栏壁纸
博主昵称
Charlotte

把书读烂,困在感情里的是笨蛋

Java抽象类、抽象方法与接口深度探讨

2023年10月30日 393阅读 0评论 1点赞

Java是一门面向对象的编程语言,其中有几个关键概念帮助我们构建灵活和强大的代码,其中最核心的是抽象类、抽象方法和接口。这篇博客将为您展示这些概念的工作方式、用途和注意点。

1. 抽象类与抽象方法

1.1 定义与示例

抽象类是不能被实例化的类,它可能包含一个或多个抽象方法抽象方法是没有具体实现的方法,只有声明。

abstract class Animal {
    // 抽象方法
    abstract void sound();

    // 普通方法
    void breathe() {
        System.out.println("呼吸空气");
    }
}

class Dog extends Animal {
    // 实现父类的抽象方法
    void sound() {
        System.out.println("狗汪汪叫");
    }
}

1.2 用途与好处

  • 模板设计:抽象类为子类提供一个通用的模板,确保子类遵循某种规范。
  • 代码重用:抽象类可以有具体的实现,减少重复代码。

1.3 注意点与缺陷

  • 抽象类不能被实例化。
  • 如果一个类继承了一个抽象类,则它必须实现该抽象类的所有抽象方法,除非它自己也是一个抽象类。
  • 一个类不能继承多个抽象类,因为Java不支持多重继承。

2. 接口

2.1 定义与示例

接口是一个完全抽象的结构,它包含了一组抽象方法。Java 8之后,接口可以包含默认方法和静态方法。

interface Swimmable {
    // 抽象方法
    void swim();

    // 默认方法
    default void breatheInWater() {
        System.out.println("通过鳃呼吸");
    }
}

class Fish implements Swimmable {
    @Override
    public void swim() {
        System.out.println("鱼在水中游泳");
    }
}

2.2 用途与好处

  • 多重继承:Java不允许一个类继承多个类,但一个类可以实现多个接口。
  • 灵活性:允许一个类实现任意数量的方法,而不必实现接口中的所有方法。

2.3 注意点与缺陷

  • 接口中的所有方法默认都是public的,你不能为它们使用其他访问修饰符。
  • 在Java 8之前,接口不能包含具体实现,这限制了代码重用。
  • 虽然默认方法允许我们在接口中加入新的方法,但可能导致与实现该接口的类的其他方法发生冲突。

3. 综合示例

abstract class Vehicle {
    abstract void run();
}

interface Flyable {
    void fly();
}

class Airplane extends Vehicle implements Flyable {
    @Override
    public void run() {
        System.out.println("在跑道上跑");
    }

    @Override
    public void fly() {
        System.out.println("在空中飞");
    }
}

这里,Airplane是一个既可以在地面跑又可以在空中飞的交通工具,通过结合抽象类和接口,我们可以很好地表示这种复杂的关系。

1
打赏
微信
微信

—— 评论区 ——

昵称
邮箱
网址
取消
人生倒计时
今日已经过去 15 小时
62%
这周已经过去 2
28%
本月已经过去 8
26%
今年已经过去 4 个月
33%
舔狗日记
今天上班不是太忙,百无聊赖,又翻出了你的相片,看了又看。今天是我认识你的第302天,也是我爱你的第302天,可是这些你并不知道,也许你知道了,也不会在意吧。 此刻的我好想你!