接口与抽象类的区别

一、1接口:
1-1、接口定义使用关键字interface

1-2、接口名字往往是叫做什么的able,代表具有什么样的能力;
1-3、公共接口的名字必须与它所在的ava文件名一致;
1-4、接口的访问修饰符只能是public,默认也是public;而不是同包;
1-5、接口可以继承接口,而且可以多继承。
*
2、接口与类的关系叫做:实现

  • 一个类在申明的最后用implements关键字,后面跟上接口的名字即可,这个类就被称之为什么接口的实现类;

  • 2-1、一个类可以在继承父类的同时,又实现接口!继承只能是单继承,但实现接口是多实现;

  • 语法上:先写继承,再写实现,如果没有写继承则默认继承Object;

  • 2-2、一个类如果实践了接口,必须实现该接口中所有的抽象方法,否则这个类就是抽象类;

  • 2-3、类从接口中获取的方法会参与到继承中去。
    */

    public abstract class NewCar extends Object implements Servicable,Wearable{

     @Override
     public void wear() {
     	// TODO Auto-generated method stub
     	System.out.println("       ");
     }
    

    }

3、属性—接口的属性只能是公共静态常量属性
//其中修饰符关键字全部可以省略,但省略后也是默认为公共静态常量的
public static final int A = 100;
public final int B = 200;
final int C = 300;
int D = 400;

4、构造方法——接口不能有构造方法,说明:接口不能产生对象。

5、初始化块——接口不能有初始化块,不管是实例还是静态初始化块。

6、行为——接口里面只能有抽象方法,访问修饰符只能是public,可以省略public abstract,但是不写也会默认为公共抽象。JDK1.8,Java运行接口当中定义实现了的方法,虽然有这个功能,但是接口的最大的意义还是写抽象方法,让没有继承关系的类可以共享行为,但又可以各有各的实现!

public default void test() {
		System.out.println("JDK1.8允许接口有实现方法,但要用default关键字申明");
	}

二、抽象
1、定义:当一个方法,我们只能能确定它的声明部分,不能确定它的实现部分(或它的实现部分应该交给子类确定),在这种情况下,我们不应该打上{},而是直接书写声明部分然后“;”号结束,这种只有声明没有实现的方法就叫做:抽象方法
2、语法:抽象方法应该在修饰符当中增加一个可选修饰符abstract
public abstract void Tset{
}
3、抽象类:不能产生对象的类。抽象类的作用是用来专门用来充当父类的,抽象类与最终类的关系(abstract和final的关系):抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
4、抽象方法:其实当抽象到一定程度的时候除了父类不能产生对象以外。该父类中的一些方法也没有实现必要。甚至无法实现
5、语法:abstract type method_name(program list);

三、区别
使用和功能的区别:

1.继承规则不同:为了数据安全,抽象类被继承时,一个类只能有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承的缺点,抽象类和接口的双重设计既保持了类的数据安全,也变相的实现了多继承。

2.接口是可插入性的保证:一个对象需要知道其他的一些对象,并且与其他对象发生相互作用以完成一项工作。现在要在系统中加入一个新的类C,问题是已有某些类可以帮新类完成一部分的功能,这时候怎么办?我们肯定会选择通过继承来得到一些已经是新得功能,但是,如果有两个功能是分别写在两个类(A,B)里面呢, Java不支持多重继承,有一个可以解决的办法是让A继承B,我们再用C继承A,这样是可以得到两个我们想要的功能(更好一点的办法就是把A和B的功能放到一个抽象类AB里面,我们的C可以继承AB),但是,如果我们需要得功能在100个类里,这时候肯定就不能用这样得方法来实现了。这时接口就显示出其妙处来。在一个类的等级结构中的任何一类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类,此类不得不实现这个接口所规定的方法,而其子类则可以从此类自动继承得到这些方法,当然也可以置换掉这些方法,这时候我们也就说这些子类具有可插性。

3.Java抽象类可以实现某些方法的部分实现,但是接口不可以(抽象类的优点)。如果向一个抽象类中加入一个新的具体方法,那么它所有的子类都会得到这个新的方法,如果向一个接口中加入一个新的方法,所有实现这个接口的类将会无法成功编译,必须让实现这个接口的类实现这个方法才行。

4.一个抽象类的实现只能由这个抽象类的子类给出,也就是说这个实现处在抽象类所定义的等级结构中,而由于Java语言的单继承性,抽象类作为类型定义工具的功能大打折扣,这时 Java接口的优势就体现出来了,任何一个实现了一个Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个接口,从而这类就有了多种类型。

四、语法上的区别:

1.继承抽象类用 extends 关键字;实现接口用 implements 关键字。继承写在前面,实现接口写在后面:

class className extends abstractClassName implements interfaceName1,interfaceName2,...{
    ...
}

2.抽象类中可以有自己的数据成员(默认具有friendly权限,其值可以在子类中重新定义,也可以重新赋值),也可以有非抽象的成员方法;而接口中只能有静态的、不能被修改的数据成员(默认是public static final 型的,且必须给其赋初值,所有实现类中不能重新定义,也不能修改其值,不过接口中一般不定义数据成员)所有的成员方法都是抽象的(默认public abstract 类型)。

3.抽象类和接口反应的设计理念不同,抽象类表示的是“is - a”关系,接口表示的是“lile - a”关系。

4.实现接口的类必须实现其中的所有的方法,继承自抽象类的子类实现所有的抽象方法。

作者:汪笑杭
来源:CSDN
原文:https://blog.csdn.net/weixin_42624909/article/details/84261056
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值