Java 抽象类与接口的区别

本文详细解释了抽象类和接口的概念及其使用方式。抽象类包含抽象方法,不能直接实例化,而接口则定义了一组公共的行为规范。文章还探讨了抽象类与接口之间的主要区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象类

抽象类中含有抽象方法,只有申明,没有具体的实现,申明格式如下:

abstract void fun();

 

若一个类含有抽象方法,则这个类为抽象类,抽象类在类前需要用abstract关键字进行修饰。抽象类不可以直接创建对象,因为其含有未实现的方法。

[public] abstract class ClassName{

abstract void fun();

}

 

抽象类与一般类的区别:

1. 抽象类必须为public或者protected,缺省情况下为public;

2. 抽象类不能用来创建对象;

3. 若一个类继承抽象类,则它需要实现其中的抽象方法,若未实现,则它也为一个抽象类,需要用abstract关键字进行修饰。

 

接口

接口中的变量被隐式地指定(只能)为public static final变量,而方法被隐式地指定(只能)为public abstract方法。

接口是一种极度抽象的类型,比抽象类更加“抽象”,一般在接口中不定义变量。

[public] interface InterfaceName{

 

}

注意:

由于不支持默认方法的接口维护成本太高,若要为一个接口添加新的方法,则需要修改所有实现了该接口的类,因此,在 Java 8 中, 接口可以拥有默认的方法,用 default 关键字进行修饰,或者用 static 关键字修饰(表示该方法属于接口,可以直接通过接口进行调用)。

在 java 8 中,以下代码可以正常运行:

public interface InterExp {
    void func1();
    static void func2(){
        System.out.println("func2");
    }
     static void func3(){
        System.out.println("func3");
     }

    int a = 123;
    int b = 23;

}

 

接口与抽象类的区别(java 8 之前,java 8 之后需注意上述说明)

1. 抽象类中可以含有普通方法,而接口中只有public abstract方法;

2. 抽象类中的成员变量可以是任意类型,而接口中只有public static final类型的变量;

3. 接口中不能含有静态代码块或静态方法,而抽象类无此要求;

4.一个类只能继承一个抽象类,但可以实现多个接口;

(语法层面)

 

5. 抽象类是对事物的抽象,即类抽象,而接口是对行为的抽象。抽象类是对整个类进行的抽象,包括属性,行为,而接口知识对类局部(行为)进行抽象;

6. 设计层面不同,抽象类作为很多子类的父类,它是一种模板设计,而接口是一种行为规范,是一种辐射式设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值