抽象类和接口的区别

在Java中,抽象类和接口都是用于实现抽象化和多态的机制,但它们之间有一些共同点和显著的区别。

共同点

  1. 抽象化:抽象类和接口都用于定义抽象行为,即可以定义方法但不提供具体实现。
  2. 不能实例化:抽象类和接口都不能被直接实例化。只能通过其子类或实现类来创建对象。
  3. 多态:它们都支持多态,允许通过父类或接口类型来引用子类对象。
  4. 继承与实现:一个类继承抽象类或者实现接口,都必须重写他们的所有方法,否则自己也必须成为抽象类,不然编译报错。

    区别:

    1.关键字

    抽象类:使用abstract关键字定义

    接口:使用interface关键字定义

    2.方法实现

    抽象类:可以包含抽象方法和具体方法

    接口:默认情况下,所有的方法都是抽象方法,(Java 8 及以后的版本允许有默认方法和静态方法)

    3.构造方法

    抽象类:可以有构造方法

    接口:没有构造方法

    4.多重继承

    抽象类:不支持多重继承,只能继承一个类

    接口:支持多重继承,可以实现多个接口

    5.访问修饰符

    抽象类:可以用多种修饰符(public,protected,default,private)

    接口:所有方法默认public修饰,因为要供类实现功能,字段默认是 public static final

    6.用途

    抽象类:通常用于表示“什么是一个的关系”(is -a)

    接口 :通常用于表示可以做什么的能力,表示功能(can- do)

区别

特性抽象类接口
关键字使用 abstract 关键字定义使用 interface 关键字定义
方法实现可以包含抽象方法和具体方法默认情况下,所有方法都是抽象的(Java 8 及以后的版本允许有默认方法和静态方法)
构造函数可以有构造函数没有构造函数
字段可以包含实例变量(字段),可以有访问修饰符只能包含 public static final 字段
多重继承不支持多重继承,只能继承一个类支持多重继承,可以实现多个接口
访问修饰符可以使用多种访问修饰符(public、protected、private)所有方法默认是 public,字段默认是 public static final
用途通常用于表示“是一个”的关系(is-a)通常用于表示“可以做”的能力(can-do)

选择使用抽象类还是接口

  • 使用抽象类:当你需要共享代码并提供一些默认实现时,使用抽象类。
  • 使用接口:当你需要定义一组功能或行为,而不关心具体实现时,使用接口。
    // 抽象类示例
    abstract class Animal {
        abstract void makeSound(); // 抽象方法
        void sleep() {              // 具体方法
            System.out.println("Sleeping...");
        }
    }
    
    // 接口示例
    interface CanFly {
        void fly(); // 默认是抽象方法
    }
    
    class Bird extends Animal implements CanFly {
        void makeSound() {
            System.out.println("Chirp");
        }
        
        public void fly() {
            System.out.println("Flying");
        }
    }
    

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值