您的位置:首页 > 编程语言 > Java开发

Java中接口和抽象类的区别你真的清楚吗?

2015-09-15 10:06 633 查看
一、引言

Java中抽象类和接口的区别你的真的全部知道吗?今天看见一片CSDN首页博文,感觉他总结的不是很好,于是自己亲自总结一下,结果发现很多意想不到的情况。那么先列一列总结出来的区别吧,这些你都知道吗?:

(1)抽象类单继承、接口多实现

(2)接口的所有成员变量都必须是public(默认会加上public static),抽象类抽象方法必须是public,其他随意

(2)对方法来说:

接口中的方法都需要是抽象的,不能用private修饰,其方法不需要手动加上abstract

抽象类的方法不一定是抽象的,抽象方法需要手动添加abstract修饰符,抽象类可以有私有非抽象方法。

(3)就实例化来说:抽象类和接口都可以通过new的方式得到实例,不过都属于Anonymous InnerType类型

(4)对于属性来说:接口只能包含初始化过的属性,抽象类随意。

(5)对于常量来说:接口和抽象类都可以包含常量,只是接口必须是public而已

(6)对于继承和实现来说:抽象类可以继承其他类,可以实现其他接口;接口可以多继承其他接口(震惊!!!)

二、用代码说话

(1)首先定义一个抽象类,代码如下,本人用注释写了其特性:

//可以看到抽象类既可以继承,也可以实现其他接口
public abstract class Test_abstract extends Money implements Test2_interface {

//可以包含初始化的属性,公有私有都可以
public int a=5;
private int a2=6;

//可以包含没有初始化的属性,共有私有都可以
public int b;
private int c;

//可以包含常量,这个必须初始化,共有私有都可以
public final int d=7;
private final int e=6;

//可以包含抽象方法,这个是基本属性,不能用private修饰
abstract int method();
public abstract void m();

//可以包含非抽象方法,共有私有都可以
private void youtu(){};
public void jiujiu(){};
}


(2)再定义一个接口,代码如下:
public interface Test_interface extends Test2_interface {
//可以包含初始化的属性,只能是public
public int a=5;
private int a2=6; //出错

//不能包含没有初始化的属性
public int b;  //出错

//可以包含常量,这个必须初始化,只能是public
public final int d=7;
private final int e=6;  //出错

//可以包含抽象方法,这个是基本属性,不能用private修饰,可以不手动加abstract修饰符
int method();
public abstract void m();

//不能包含非抽象方法
private void youtu(){};  //出错
public void jiujiu(){};  //出错

}


(3)定义一个Main类,验证其能否被new出来,代码如下(如果实践,请先把上面报错的代码注释):

public class Main {

public static void main(String[] args) throws Exception {

//new了一个抽象类 Anonymous InnerType
Test_abstract m=new Test_abstract() {

@Override
int method() {
//匿名的类可以用this访问公有的任何成员
this.a=1;
return 0;
}
@Override
public void m() {

}
};

//new了一个接口  Anonymous InnerType
Test_interface x= new Test_interface() {
@Override
public int method() {
//匿名的类可以用this访问公有的任何成员
int x=this.d;
return 0;
}

@Override
public void m() {
}
};
}
}


三、小结

上面是本人总结的几条规则,其实更应该从Java设计方面去思考,为什么抽象类和接口有这些区别。这样就脱离的死记硬背了。

如有错漏之处,请留言指出!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: