使用abstract修饰符修饰的类。
官方点的定义就是:如果一个类没有包含足够多的信息来描述一个具体的对象,这样的类就是抽象类。
抽象类在实际应用中,更多的是因为类中有抽象方法。抽象方法:只声明,不实现。具体的实现由继承它的子类来实现。实际点就是:被abstract修饰的方法,只有方法名没有方法实现,具体的实现要由子类实现。方法名后面直接跟一个分号,而不是花括号。例如:
public abstract int A();一个类中含有抽象方法(被abstract修饰),那么这个类必须被声明为抽象类(被abstract修饰)。
public abstract class Bird{ // 定义一个抽象类 abstract void walk(); } public abstract class Airplane{ // 定义一个抽象类 abstract void run(); }官方定义:接口在java中是一个抽象类型,是抽象方法的集合。一个类通过继承接口的方式,从而继承接口的抽象方法。
从定义上看,接口是个集合,并不是类。类描述了属性和方法,而接口只包含方法(未实现的方法)。接口和抽象类一样不能被实例化,因为不是类。但是接口可以被实现(使用 implements 关键字)。实现某个接口的类必须在类中实现该接口的全部方法。虽然接口内的方法都是抽象的(和抽象方法很像,没有实现)但是不需要abstract关键字。
接口中没有构造方式(因为接口不是类)接口中的方法必须是抽象的(不能实现)接口中除了static、final变量,不能有其他变量接口支持多继承(一个类可以实现多个接口)举例:鸟和飞机都具有飞的功能,但是他们并不是同一类事物,所以对于这中“功能”的抽象,我们应该用接口实现,虽然我们定义成抽象类也能实现。
public interface Fly{ // 定义一个接口 void fly(); } public abstract class Bird{ // 定义一个抽象类 abstract void walk(); } public abstract class Airplane{ // 定义一个抽象类 abstract void run(); }同时,鸟有自己的走方法,飞机有跑方法,这是这一类事物的抽象,子类都具有,所以我们此时定义为抽象类最合适不过 我们再看燕子和战斗机的类:
public class Swallow extends Bird implement Fly{ Swallow类继承了Bird类,并对Fly接口进行了实现 void fly(){}; void walk(){}; } // Battleplaneextends继承了Airplane类,并对Fly接口进行了实现 public class Battleplaneextends Airplane implement Fly{ void fly(){}; void run(){}; } 抽象类侧重某一类事物抽象,接口侧重某一种功能抽象更多代码示例地址:Day13