接口的和抽象的区别和联系

抽象

在编写一个类时,会为这个类定义一些方法,这些方法用以描述该类的行为方式,这些方法都有具体的方法体,是怎么实现的,但是在某些情况下,父类只知道其子类有怎样的方法,却不知道该怎么实现,就用抽象类和抽象方法实现。

抽象方法和抽象类

  • 抽象类、抽象方法必须使用abstract修饰符来修饰,抽象方法不能有方法体;

  • 抽象类不能被实例化,即使抽象类里不包含抽象方法,这个抽象类也不能被实例化

  • 抽象类可以包含成员变量,方法(普通方法,抽象方法都可以)、构造器、初始代码块、内部类(接口,枚举)5种成分,抽象类的构造器不能用于创造实例,主要用于被其他子类调用。

  • 含有抽象方法的类(包括直接定义了一个抽象方法;或者继承一个抽象类,但完全没有实现父类包含的抽象方法;或实现一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义成抽象类。

  • 抽象类中可以包含普通方法,但是普通类中不能包含普通方法;

  • 抽象方法没有方法体,是用来子类具体实现的;

  • abstract不能用于修饰成员变量,不能用于修饰局部变量,也不能修饰构造器,抽象类里定义的构造器只能是普通构造器;

  • static和abstract不能同时出现修饰某个方法,但不是绝对的,可以同时修饰内部类

  • abstract只有被子类实现才会有意义,因此***abstract和private不能一起出现***

抽象类模版模式:

  • 抽象类可以只定义,需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类去实现;
  • 父类中kennel包含需要调用的其他系列方法的方法,这些调用方法既可以由父类实现,也可以由子类实现,父类里提供的放啊放只是定义了一个通用算法,其实现不能完全依赖自身实现,必须依赖其子类的辅助。

用static修饰的方法是属于类的,可以由类直接调用;
普通方法是由对象调用的。

接口

Java8中,重新定义了接口,接口里可以有抽象方法,也可以有默认的方法defau修饰的。
接口的基本语法:
修饰符 interface 接口名 extends 父接口1,父接口2…{
零到多个常量定义…
零到多个抽象方法定义
零到多个抽象方法定义
零到多个内部类、接口、枚举定义
零到多个默认方法或类方法定义
}

  • 接口命名规则,首字母大写,通常使用形容词;
  • 接口不能创建对象;
  • 一个接口可以有多个父接口,但接口只能继承接口,不能继承类。
  • 接口是定义的一种规范,因此不能包含构造器和初始块定义,接口里可包含成员变量(类里的变量,只能是静态常量),方法(只能是类方法,默认方法,抽象方法)、内部类(包括内部接口、枚举)定义
  • 修饰符只能是public来修饰;
  • 不管是否使用public static final 修饰符,接口里的成员变量总是用这三个来修饰,而且接口里没初始代码块和构造器,所以只能在一开始就指定默认值;
  • 接口里定义的方法只能是抽象方法、类方法、默认方法,如果不是默认方法,程序会自动为普通方法增加abstract修饰符;接口里的普通方法不能有方法体,类方法和默认方法都必须有方法实现体;

接口的继承

接口的继承可以为多继承
子接口扩展某个父接口,将会获得父接口定义里的所有抽象方法、常量。

使用接口

接口不能用于创建实例,但接口可以用于声明引用类型变量,接口的主要用途就是被实现
主要用途:

  • 定义变量(静态常量);
  • 调用接口中定义的常量
  • 被其他类实现;

类实现接口的语法格式:
修饰符 class 类名 extends 父类 implements 接口1,接口2…{

类体部分;
(可以获得所实现接口里定义的常量(成员静态常量);方法(抽象方法和默认方法))
}

类的继承和接口的继承一样,静态的方法可以拿来直接用,但是不能重写。

一个类实现了一个或者多个接口后,这个类必须完全实现这些抽象方法,否则将会保留从父类继承来的抽象方法,该类也必须得定义成抽象类。

接口和抽象类的不同点:(接口里不包含的抽象类里一般都可以有)

  • 接口只能包含抽象方法,静态方法,默认方法;
  • 抽象类里可以定义普通方法;
  • 接口里能定义静态常量,不能定义普通常量;
  • 抽象类里既可以定义静态常量也可以定义普通常量
  • 接口里不包含构造器,初始化块;抽象类里可以包含构造器初始化块,抽象类的构造器不是为了创建对象,是为了子类可以调用这些构造器来完成属于抽象类的初始化操作;
  • 一个类最多只有一个直接父类,但是一个类可以实现多个接口。

类与接口的关系:实现关系

注意:

  • 非抽象类实现一个接口时,必须要把接口中的全部方法实现
  • 抽象类实现一个接口时,可以实现也可以不实现接口中的方法
  • 一个类可以实现多个接口
  • 接口与接口之间的关系:继承关系
    注意:
  • 一个接口可以继承多个接口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值