接口与抽象类的却别

接口与抽象类的区别

1、抽象类:是从多个类中抽象出来的模板,是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。将这种抽象更彻底进行,可以得到一种特殊的抽象类——>接口<——没有继承关系的类,也可以有共有的行为。

抽象类以JDK中的GenericServlet为例:

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    // abstract method
    abstract void service(ServletRequest req, ServletResponse res);
 
    void init() {
        // Its implementation
    }
    // other method related to Servlet
}

接口——》定义使用关键字是

interface

接口名字往往叫做**able,代表了具有什么样的能力
访问修饰符只能是 public ,就算不写也是默认为public而不是包。

在多个具体类中的共性行为,放到作为父类的抽象类中实现;而具体类中不同的行为,在抽象类中用抽象方法的形式定义,在具体的子类实现。
2、 接口中全部是抽象方法,所以不能实例化。类不能继承接口,只能实现接口所定义的方法。
3、接口与类的关系叫做:实现。
4、 一个类在声明的最后用关键字 implements,后面接上接口的名字即可。
这个类就被称为***接口的实现类。
5、一个类可以在继承父类的同时,又实现接口(一个或多个接口)。
6、一个类如果实现了接口,必须实现该接口中所有的抽象方法,否则这个类就是抽象类。
7、类从接口中获取的方法会参与到继承中去。
语法: 先写继承,再写实现,如果没有写继承则默认继承Object;

public  abstract class newCar extends Object implements  Serviable,Wearable{ 
}

动态绑定方式:接口的引用可以指向实现类的对象;接口的引用只能看到对象身上来自于这个接口的行为

一、接口与类的相似之处:

  1. 接口可以有任意数量的方法;
  2. 接口保存为以“java”为后缀名的文件,接口需要与文件名一致;
  3. 接口编译后是class文件
  4. 在包中的接口,其相应的字节码文件必须放置在和包名称一致的一个目录结构中。

二、 接口与类的不同之处:

  1. 接口不能实例化;
  2. 接口不包含任何构造器,不能构造方法,不能产生对象,不能单独去用,必须绑定在类身上用;
  3. 接口中的所有方法都是抽象的;
  4. 接口中不能包含实例成员变量。唯一可以出现在接口中的成员变量必须是同时声明为static和 final;
  5. 接口不能被一个类继承,只能被一个类来实现;
    6.接口可以继承接口, 一个接口能够继承多个接口。

重点:接口不是类。类描述了对象的属性和行为,而接口包含了一个类需要实现的行为

接口的属性——:只能是公共的、静态、常量。
其中修饰符关键字全部可以省略,但是省略后也是默认为: 公共静态长量

public  static final int A= 100;
public  final  int B= 200;
final int C = 300;
int D = 400;
                                 JDK1.8的java运行当中允许实现方法,但要用default声明

特殊点:用default声明,虽然有这个功能,但是接口最大的意义还是写抽象方法,让没有没有继承关系的类可以共享行为,但又可以各有各的实现。

default void  wear();
system.out.println("穿");

public default   void test(){
system.out.println("    JDK1.8的java运行当中允许实现方法,但要用default声明 ")
}

三、接口和抽象类都具有的特征:

  1. 二者都不能被实例化,他们都位于继承树的顶端,用于被其它类实现或者继承。
  2. 二者都可以包含抽象方法,实现接口或者继承抽象类的子类都必须实现这些抽象方法。

四、接口和抽象类的差异性:

1. 设计目的上的差别:
抽象类通常是作为多个子类的共同父类,实现部分功能,其他的功能交给不同的子类完成,体现的是一种模板式设计;而接口体现的是一种规范,接口规定了实现者必须向外提供什么,规定了调用者可以调用那些,以及如何调用。

2. 用法上的差别:
1、接口只能包含抽象方法,访问修饰符只能是public,可以省略public abstract,但是不写也默认为公共、抽象;而抽象类中可以包含普通方法;
2、接口中不能定义静态方法;而抽象类可以定义静态方法;
3、接口中只能定义静态常量属性,不能定义普通属性;而抽象类即可以定义普通属性,也可以定义静态常量属性;
4、接口不包含构造器;而抽象类中可以包含构造器。(抽象类中的构造器并不是用于创建对象,而是让子类调用这些构造器来完成属于抽象类的初始化工作。)
5、接口中不包含初始化块,不管是实力还是静态初始化块;而抽象类可以包含初始化块;
6、一个类最多有一个父类,包括抽象类;但是一个类可以直接实现多个接口,通过实现多个接口来弥补Java单继承的不足,更加丰富起来。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值