抽象类:抽象类是用来捕捉子类的通用性的,不能被实例化,只能做为子类的超类,抽象类是被用来创建继承层级里子类的模板的。
首先了解一下抽象方法。抽象方法是一种特殊的方法,只声明而没有具体的实现,声明格式为:abstract void fun ();
抽象方法必须由abstract修饰,如果一个类含有抽象方法则称这个类为抽象类,抽象类必须在类前用abstract修饰,抽象类中无具体的方法所以不能用抽象类创建对象。
抽象类中不一定必须含有抽象方法。
抽象类与普通类的区别:
1抽象方法必须为public或者protected (因为如果是private 则不能被子类继承,子类便无法实现该方法)缺省情况下默认为public。
2:抽象类不能创建对象
3:如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法,如果子类没有实现父类的抽象方法,则必须将子类也定义为abstrct类。
接口:接口是抽象方法的集合,如果一个类实现了某个接口,那么就继承类这个接口的抽象方法。
接口中可以含有变量和方法,接口中的变量会被隐式的指定位 public static final 变量(并且只能是public static final 用private,protected修饰会报错)而方法会被隐式的指定位 public abstract(用其他关键字,比如private ,protected , static , final 修饰会报编译错误)并且接口中所有的方法都不能具体实现,也就是说接口的方法都是抽象方法,
允许一个类遵循多个特定的接口,如果一个非抽象类遵循了某个接口,就必须实现接口中的所有方法,对于遵循某个接口的抽象类,可以不实现该接口的抽象方法。
抽象类和接口的区别:
1: 抽象类中可以实现成员方法的实现细节,接口中只能是public abstract 类型。
2:抽象类中成员变量可以是任何类型的,而接口中的成员变量只能是public static final类型。
3:抽象类中不能含有构造方法以及静态代码块静态方法,而抽象类中均可包含。
注意:
声明接口时,只能够使用public abstract interface 使用其他的修饰符编译器会报错。
接口与抽象类在本质上的区别:
抽象类是java语言中体现了是一种继承的关系,要想使得继承的关系合理,父类和派生类之间必须存在is a 关系,即父类和派生类在本质上应该是相同的,对于interface来说则不然,并不要求interface的实现着和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已。