Java接口和抽象类的区别

  1. 抽象类:若是一个类含有抽象方法,那么这个类为抽象类,抽象类的类前必须用abstract关键字修饰,由于抽象类中含有未实现的方法,因此不能用抽象类建立对象
  2. 抽象方法:是一个特殊的方法,他只有声明,没有具体的实现,由于抽象类中含有未具体实现的方法,因此不用用抽象类建立对象,若是一个类继承抽象类,那么久必须为基类中的抽象方法提供定义,若是没有实现抽象类的方法,那么继承的类也是抽象类。

抽象类和普通类的三个不一样点:java

  1. 抽象方法必须为public或者protected(若是为private,那么将不能被子类继承,子类没法实现其抽象方法),因此缺省状况下默认时public
  2. 抽象类不能用来建立对象
  3. 若是一个类继承一个抽象类,那么它必须实现父类(抽象类)的抽象方法,若是子类没有实现父类的抽象方法,那么必须将子类也定义为abstract(抽象类)

接口:能够含有变量和方法,须要注意的是接口中变量会被隐式地定义为public static final变量(而且只能是public static final变量,使用private修饰会报编译错误),方法也会被指定为public abstract,而且只能是public abstract方法(使用其余关键字修饰如 private public protected都会报错),而且接口中的方法不能有具体的实现,接口中的方法是抽象方法。接口是一种极度抽象的类型,比抽象类更加的抽象,通常状况下不在接口中定义变量。ide

抽象类和接口的区别?函数

  • abstract class抽象类在java语言中表示的是一种继承关系,一个类只能有一次的继承关系,可是一个类却能够实现多个接口interface.
  • abstract class抽象类能够有本身的数据成员,也能够有不是非abstract得成员方法,
  • interface中,只可以有静态的不可以被修改的静态成员(必须是static final的,通常不在interface中定义数据成员),接口中的全部成员方法都是abstract的
  • 实现抽象类的和接口的类必须实现其中全部的方法,若是子类没有实现抽象类中的全部方法那么子类也必须是抽象类,子类实现接口,就必须把接口中的全部方法实现。接口也能够继承接口,此时不须要实现父类接口,抽象类能够有非抽象方法,接口中不能有具体实现的方法。
  • 接口中的变量默认为public static final类型,而且必需要给他初始值,因此实现类中不能从新定义,也不能改变他的值。
  • 接口中方法默认为public abstract类型,不能是static方法,static方法是类方法,他不容许子类覆写(override)可是抽象类容许有static方法。

相同点:对象

1.都是抽象概念的产物;继承

2.都须要被继承或实现才能发挥他们的功能;接口

3.抽象类和接口都不能被实例化,不能调用new关键字建立实例。编译

不一样点:class

  1. 抽象类必需要用abstract修饰,定义接口要用interface关键字;变量

  2. 抽象类能够包含抽象方法,也能够包含普通方法;构造函数

  3. 抽象类里能够定义非静态变量,静态变量,接口里全部定义的变量都默认是public static final修饰;

  4. 抽象方法必须显示地定义成 public abstract, 接口中的方法默认就是public abstract,也可显示定义;

  5. 抽象类能够包含Field,方法(普通方法和抽象方法)、构造器、初始化块、内部类、枚举类6种成分。接口里能够有Field,方法,内部类,枚举。

  6. 抽象类只能单继承,接口支持多继承。

  7. 抽象类能够有构造函数,用来被子类调用,不能用来建立实例。接口是没有构造函数的。

相关文章
相关标签/搜索