- 抽象类:若是一个类含有抽象方法,那么这个类为抽象类,抽象类的类前必须用abstract关键字修饰,由于抽象类中含有未实现的方法,因此不能用抽象类建立对象
- 抽象方法:是一个特殊的方法,他只有声明,没有具体的实现,由于抽象类中含有未具体实现的方法,因此不用用抽象类建立对象,若是一个类继承抽象类,那么久必须为基类中的抽象方法提供定义,若是没有实现抽象类的方法,那么继承的类也是抽象类。
抽象类和普通类的三个不一样点:java
- 抽象方法必须为public或者protected(若是为private,那么将不能被子类继承,子类没法实现其抽象方法),因此缺省状况下默认时public
- 抽象类不能用来建立对象
- 若是一个类继承一个抽象类,那么它必须实现父类(抽象类)的抽象方法,若是子类没有实现父类的抽象方法,那么必须将子类也定义为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
-
抽象类必需要用abstract修饰,定义接口要用interface关键字;变量
-
抽象类能够包含抽象方法,也能够包含普通方法;构造函数
-
抽象类里能够定义非静态变量,静态变量,接口里全部定义的变量都默认是public static final修饰;
-
抽象方法必须显示地定义成 public abstract, 接口中的方法默认就是public abstract,也可显示定义;
-
抽象类能够包含Field,方法(普通方法和抽象方法)、构造器、初始化块、内部类、枚举类6种成分。接口里能够有Field,方法,内部类,枚举。
-
抽象类只能单继承,接口支持多继承。
-
抽象类能够有构造函数,用来被子类调用,不能用来建立实例。接口是没有构造函数的。