接口和抽象类的区别

接口关键字:interface
    接口定义了你要实现某种功能的规范,
接口成员
1、接口的方法都是抽象方法,默认使用public abstract 修饰,不能修改。
2、接口的变量都是静态常量,默认使用public static final修饰,不能修改。
3、接口中的常量必须在声明时赋值,常量名称全大写。

接口的用法
接口不能被创建对象,接口中的抽象方法由实现类实现。实现类使用implements实现接口,可以同时实现多个接口,使用逗号分割。

JAVA类具有单继承,多实现的特点。每个类只能继承一个父类对象,但是可以实现多个父接口,顺序为:先继承,在实现。

那么接口的作用是什么呢?
1、Java单继承的原因所以需要曲线救国作为继承关系的一个补充。
2、把程序模块进行固化的契约,降低偶合。把若干功能拆分出来,按照契约来进行实现和依赖。
3、定义接口有利于代码的规范。(接口分离原则)

抽象类:abstract
    把相同的属性和方法抽象到一个类中,子类只需要继承父类。
    普通类是描述对象的某一类事物的抽象,而抽象类则是更高层次对具有相同特征的一批普通类进行抽象。
        abstract class 类名{
            public abstract void 抽象方法名称();
        }
    抽象类的特点:
        1.抽象类不能直接用new来实现
        2.必须使用abstract修饰符去修饰
        3.抽象类里可以有普通方法
        4.抽象类里的抽象方法使用abstract修饰符去修饰,抽象方法没有方法体。(交给子类实现)
        5.抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象
        类也有构造器。
        6.如果抽象类中具有抽象方法,子类必须实现抽象方法

    ******子类继承了抽象类,就必须重写抽象类中的所有方法
    注意:abstract只能修饰对象成员,不能修饰静态成员,抽象方法权限修饰符不能为private,final。
    抽象类不能被直接创建对象实例,只能被子类继承。

   注意:

    java抽象类的构造方法和普通类的构造方法一样,都是用来初始化类。只是抽象类的构造方法不能直接调用,因为抽象类不能实现实例。但是一旦一个普通类继承了抽象类 便也可以在构造函数中调用其抽象类的构造函数也可以使用其方法。
 抽象类和普通类的区别
    1、抽象类不能被直接创建实例对象,普通类可以。
    2、抽象类中可以有抽象方法,也可以没有抽象方法,普通类不能有抽象方法。
    3、如果抽象类继承其他抽象类,可以不用重写其父类的抽象方法,普通类继承抽象类必须重写抽象方法。

接口和抽象类的相同点
1、抽象类和接口都不能被直接实例化,他们都需要被继承或实现。(类和抽象类中间是继承关系,类和接口是实现关系,接口和接口之间可以有继承关系)
2、接口和抽象类都可以包含抽象方法,实现或继承他们的普通类必须重写抽象方法。
3、抽象类和接口,都可以体现在多态中,作为变量数据类型接收子类实例对象。

接口和抽象类的不同点
1、用途不同:
    抽象类中抽取了多个子类的共性,作为模版存在,用于被子类继承实现代码复用。
    接口定义了某种功能的规范,当类需要新增其功能时,只需要实现接口,重写接口的规范(抽象方法)即可,同时接口也弥补了java单继承的缺陷。
2、接口里只能包含抽象方法,抽象类则可以包含普通方法和抽象方法。
3、接口不能定义静态方法,抽象类可以(jdk1.8之后可以)。
4、接口中的成员变量是静态常量,
    使用public static final修饰。抽象类则可以定义静态常量,也可以定义非静态成员变量。
5、接口不能被创建为对象,不含构造器,抽象类可以被实例化为对象,抽象类具有构造器。
    抽象类是可以被实例化,子类对象创建的时候,创建抽象类父类对象。
    抽象类是可以有静态代码块,构造代码块,构造器方法,抽象类就既可以有实例成员、也可以有静态成员。

抽象类强调的是从属关系,接口强调的是功能。最后一张表格说明问题~~

类型抽象类接口
定义abstract classinterface
继承抽象类可以继承一个类和实现多个接口;子类只能继承一个抽象类接口可以继承接口,子类可以实现多个接口
访问修饰符抽象类可以有public,protected 和default这些修饰符只能是public(默认修饰符)
方法实现可以定义构造方法,可以有普通方法和抽象方法没有构造方法且方法都是抽象方法
实现方式子类使用extends来继承抽象类。如果子类不是抽象类,它需要提供抽象类中所有声明方法的实现子类使用implements实现接口,它需要实现接口中声明的所有方法
作用把相同的东西提取出来,重用。可以扩展对象的行为功能一种规范(约束),降低耦合

如有不同意见欢迎留言指正。。。 

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值