引用:深入理解Java的接口和抽象类
1.抽象类- 定义:如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。抽象方法必须用abstract关键字进行修饰。抽象类也可以拥有成员变量和普通的成员方法
[public] abstract class ClassName { //抽象类 abstract void fun(); //抽象方法 } //抽象类的继承 [public] class abstractImpl extends ClassName { void fun() { //.... } }
- 抽象类和普通类的区别
(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
(2)抽象类不能用来创建对象
原因:深入Java中的抽象类为何不能实例化?
学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,JAVA不允许抽象类,接口直接实例化。抽象类与接口都不能实例化,继承或实现后就可以实例化了。
(3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
在其他方面,抽象类和普通的类并没有区别
2.接口类- 定义: 接口泛指供别人调用的方法或者函数。 接口是对行为的抽象。
(1) 接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。从这里可以隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。
(2) 允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。
//定义形式 [public] interface InterfaceName { } //要让一个类遵循某组特地的接口需要使用implements关键字 class ClassName implements Interface1,Interface2,[....]{ }3.抽象类和接口类区别
一个类只能继承一个抽象类;
抽象类可以实现接口的所有方法,也可以一个都不实现。
一个类却可以实现多个接口对整个类整体进行抽象,包括属性、行为
e.g抽象类airplane(战斗机,客机等子类实现抽象类airplane)
对行为的抽象
e.g接口类飞行存在方法fly()(抽象类Airplane和Bird分别根据自己的需要实现Fly这个接口)
如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。(抽象类bird实现了飞行类,bird子类鸵鸟可以不实现飞行类中的fly()方法)
参考:java抽象类实现接口
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)