abstract class 和 interface 有什么区别

打印 上一主题 下一主题

主题 874|帖子 874|积分 2622

目录

abstract class 和 interface 有什么区别

1.抽象类

抽象类:声明方法的存在而不实现的类,如果一个类中没有包含足够的信息来描绘一个具体的对象,它只能被继承,派生出子类,这样的父类就是抽象类。
1.1抽象类的格式
  1. [public] abstract class 类名 [extends父类] [implements接口列表]
  2. {
  3.     //属性声明及初始化;
  4.     //抽象方法的声明;
  5.     //非抽象方法声明及方法体;
  6. }
复制代码
1.2抽象类注意事项

1.修饰抽象类的修饰符有public和默认修饰符两种;
2.抽象类中可以有抽象方法,也可以有非抽象的方法;
3.抽象方法是无方法体的方法。
4.定义抽象类时,要在关键字class的前面添加abstract。
5.抽象类不能被实例化;
6.其包含的抽象方法必须在其子类中被实现,否则该子类只能声明为abstract;
7.抽象方法不能为static;
8.在下列情况下,一个类必须声明为抽象类:

  • 当一个类的一个或多个方法是抽象方法时;
  • 当类是一个抽象类的子类,并且没有实现父类的所有抽象方法,即只实现部分;
  • 当一个类实现一个接口,并且不能为全部抽象方法都提供实现时;
2.接口

由于类的多继承能够导致方法调用的冲突,所以Java中的类只能单继承。但是很多时候还是需要多继承的,Java中的接口就可以实现多继承,接口中不存在具体方法,不会引起方法调用的冲突。instanceof运算符可以用来决定某对象的类是否实现了接口
2.1接口的格式
  1. [public] interface 接口名 [extends 父接口列表]{
  2.      // 属性声明,不写也是公共常量
  3.      [public] [static] [final] 属性类型属性名 = 常量值 ;
  4.      // 方法声明
  5.      [public] [abstract] 返回值类型方法名 ( 参数列表 ) ;
  6. }
复制代码
1.接口中只包含常量和抽象方法,而没有变量和方法的实现,接口对类来说是一套规范,是一套行为协议。
2.接口不是一个类,不能实例化。
3.接口规定了类的共同行为。
4.在Java中,接口的声明采用interface关键字,接口不是一个类,没有构造方法,不能被实例化。
5.修饰接口的修饰符只有public和默认修饰符两种,不写也是public的
6.接口可以是多继承,接口只能继承接口,不能继承类。
7.属性必须是常量(有初值),方法必须是抽象的(无方法体)。
2.2接口可以多继承
  1. //B,C也是接口
  2. public interface A extends B,C {
  3. }
复制代码
2.3接口的实现(implements)

如果一个类要实现一个接口,那么这个类就必须实现接口中所有抽象方法。否则这个类只能声明为抽象类,多个无关的类可以实现一个接口,一个类可以实现多个无关的接口,一个类可以在继承一个父类的同时,实现一个或多个接口。
  1. class 类名 [extends 父类] [implements 接口列表]
  2. {
  3. 覆盖所有接口中定义的方法;
  4. }
复制代码
3.异同

相同:子类必须实现它门的抽象方法,抽象类与接口都不能创建自己的对象
不同:继承使用extends,接口的实现用implements
抽象类可以没有抽象方法,接口中方法都是抽象的
抽象类可以有自己构造器及普通方法,接口中没有构造器
子类只能继承一个抽象类,但可以实现多个接口
抽象类主要通过共享的属性,接口主要提供共享的方法

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

花瓣小跑

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表