java抽象类与接口区别是什么_Java中抽象类与接口有什么区别

理解抽象

abstract class和interface是Java中对于抽象类定义两种机制,正是因为这两种机制的存在,才赋予Java强大的面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具备至关大的类似性,设置能够互相替换,所以在进行抽象类定义时显得比较随意。java

其实,二者仍是由差异的,对于他们的选择设置反映出对于问题空余本质的理解,对于涉及意图的理解是否正确合理。本文将对他们之间区别解析,视图给开发者提供一个在两者之间选择依据编程

语法定义理解

1.抽象类函数

abstract class Demo {

abstract void method1();

abstract void method2();

2.接口this

interface Demo {

void method1();

void method2();

}

在abstract class方式中,Demo能够有本身的数据成员,也能够有非abstract的成员方法,而在interface方式实现中,Demo只能有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中通常不定义数据成员),全部的成员方法都是抽象的。从某种意义上说,interface时一种特殊的abstract class。设计

编程角度理解

首先,抽象类在Java中表明的是继承关系,一个类只能使用一次继承关系。可是,一个类却能够实现多个接口。指针

其次,在抽象类的定义中,咱们能够赋予方法的默认行为。code

可是在接口的定义中,方法却不能拥有默认行为。不过在jdk1.8中能够使用default关键字实现默认方法。对象

interface InterfaceA {

default void foo() {

System.out.println("InterfaceA foo");

}

}

在Java8以前,接口与其实现类之间的耦合度过高了,当须要添加一个方法时,全部的实现类都必须随之修改。默认方法解决了这个问题,他能够为接口添加新的方法,而不会破坏已有的接口实现。这在 lambda 表达式做为Java 8 语言的重要特性而出现之际,为升级旧接口且保持向后兼容(backward compatibility)提供了途径。继承

通常性理解

接口和抽象类的概念不同。接口是对动做的抽象,抽象类是对根源的抽象。从设计理念上,接口反映的是 “like-a” 关系,抽象类反映的是 “is-a” 关系。 抽象类表示的是,这个对象是什么。接口表示的是,这个对象能作什么。好比,男人,女人,这两个类(若是是类的话……),他们的抽象类是人。说明,他们都是人。 人能够吃东西,狗也能够吃东西,你能够把“吃东西”定义成一个接口,而后让这些类去实现它. 因此,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),可是能够实现多个接口(吃饭接口、走路接口)。接口

总结

抽象类和接口都不能直接实例化,若是要实例化,抽象类变量必须指向实现全部抽象方法的子类对象,接口变量必须指向实现全部接口方法的类对象。

抽象类要被子类继承,接口要被类实现。

接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

抽象类里能够没有抽象方法。

接口能够被类多实现(被其余接口多继承),抽象类只能被单继承。

接口中没有 this 指针,没有构造函数,不能拥有实例字段(实例变量)或实例方法。

抽象类不能在Java 8 的 lambda 表达式中使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值