参考文章
http://www.bdqn.cn/news/201312/12313.shtml
http://www.cnblogs.com/xiaoao808/archive/2008/03/11/1100886.html
1.两者的区别:
先看两者的定义方式及使用方法:
public abstract class MyAcstract extends Activity {
public int t; //普通数据成员
abstract void method1(); //抽象方法,抽象类的子类在类中必须实现抽象类中的抽象方法
public void method4 (){
//抽象类中可以赋予非抽象方法方法的默认行为,即方法的具体实现
};
}
public interface MyInterfafce {
int a=0;//虽然没有static final修饰,但他肯定是隐式的声明为static final的
void mothod5();//虽然没有abstract修饰,但它肯定是抽象方法
}
public class MainActivity extends MyAcstract implements MyInterfafce{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
void method1() {
//abstract class中的抽象方法
}
@Override
public void method4() {
super.method4();
//abstract class中的非抽象方法
}
@Override
public void mothod5() {
//interface class中的抽象方法
}
}
a. abstract class表示一种继承关系,关键字用extends;interface class表示接口,关键字用implements.
b. 一个类一次只能使用一次继承关系(单继承),即一个类一次只能继承一个abstract class;一个类可以同时实现多个interface class.
c. abstract class可以有abstract数据成员,也可以有非abstarct的成员方法;interface class所有的成员方法都是abstract的,不用abstract修饰;成员变量必须是static final的,不用修饰也会隐式的声明为这样.
d. abstract class:其中的抽象方法不可以有默认行为,非抽象方法可以有默认行为;interface class:其中不可以有非抽象方法,只能有抽象方法,并且不可以有默认行为
f.interface强调特定功能的实现,而abstract class强调所属关系
2.相同点及联系
a.两者都是抽象类,都不能实例化
b.interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。
c.interface可以看做一种特殊的abstract