Java接口和抽象类的区别

通过abstract来定义抽象类,通过interface关键字来定义接口。

// 这是一个抽象类

abstract class Animal{

}

// 这是一个接口

interface Animal{

}

 

区别:

  • 抽象类中可以没有抽象方法,也可以抽象方法和非抽象方法共存

优点:如果在抽象类中加入一个新方法,那么该抽象类的子类会全部得到这个新方法,

            如果在接口中加入新方法,所有实现该接口的子类会编译报错,因为需要让每个子类再次实现该方法。

  • 抽象类和类一样是单继承的;接口可以实现多个父接口

对比:一个抽象类的实现只能由这个抽象类的子类给出,所以抽象类作为类型定义工具的效能大打折扣。

            子类能够同时实现多个接口,所以接口作为类型定义工具效能比较高。

结合:“缺省适配模式”。应用场景:子类不用实现接口的所有方法。方法:定义接口-》抽象类继承该接口-》子类实现抽象类的所需方法。

  • 抽象类中可以存在普通的成员变量;接口中的变量必须是static final类型的,必须被初始化,接口中只有常量,没有变量
  • 接口中的方法在JDK8之前只能是抽象的,JDK8版本开始提供了接口中方法的default实现
```

public interface MyInterface {

    // 定义一个已经实现的方法,使用default表明

    default void say(String message){

        System.out.println("Hello "+message);

    }

    // 普通的抽象方法

    void test();

}


class MyClass implements MyInterface{

    @Override

    public void test() {

        System.out.println("test...");

    }

}

class Main{

    public static void main(String[] args) {

        MyClass client = new MyClass();

        client.test();

        client.say("World...");

    }

}

```

注:实现类实现两个具有相同方法的接口时,会报错,解决办法:1.实现类重写该方法。2.在实现类中指定要使用哪个接口中的默认方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值