Java中接口和抽象类的区别你真的清楚吗?
来源:互联网 发布:seo免费优化工具 编辑:程序博客网 时间:2024/06/09 14:27
一、引言
Java中抽象类和接口的区别你的真的全部知道吗?今天看见一片CSDN首页博文,感觉他总结的不是很好,于是自己亲自总结一下,结果发现很多意想不到的情况。那么先列一列总结出来的区别吧,这些你都知道吗?:
(1)抽象类单继承、接口多实现
(2)接口的所有成员变量都必须是public(默认会加上public static),抽象类抽象方法必须是public,其他随意
(2)对方法来说:
接口中的方法都需要是抽象的,不能用private修饰,其方法不需要手动加上abstract
抽象类的方法不一定是抽象的,抽象方法需要手动添加abstract修饰符,抽象类可以有私有非抽象方法。
(3)就实例化来说:抽象类和接口都可以通过new的方式得到实例,不过都属于Anonymous InnerType类型
(4)对于属性来说:接口只能包含初始化过的属性,抽象类随意。
(5)对于常量来说:接口和抽象类都可以包含常量,只是接口必须是public而已
(6)对于继承和实现来说:抽象类可以继承其他类,可以实现其他接口;接口可以多继承其他接口(震惊!!!),多继承代码如下:
//接口可以多继承public interface tet1 extends DialogInterface.OnClickListener, DialogInterface.OnCancelListener {}
二、用代码说话
(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(){};}
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 InnerTypeTest_abstract m=new Test_abstract() {@Overrideint method() {//匿名的类可以用this访问公有的任何成员this.a=1;return 0;}@Overridepublic void m() {}};//new了一个接口 Anonymous InnerTypeTest_interface x= new Test_interface() {@Overridepublic int method() {//匿名的类可以用this访问公有的任何成员int x=this.d;return 0;}@Overridepublic void m() {}};}}
三、小结
上面是本人总结的几条规则,其实更应该从Java设计方面去思考,为什么抽象类和接口有这些区别。这样就脱离的死记硬背了。
如有错漏之处,请留言指出!
- Java中接口和抽象类的区别你真的清楚吗?
- Java抽象类和接口的区别,你知道吗?
- java中抽象类和抽象接口的区别
- 【JAVA】Java中抽象类和接口的区别
- java中接口和抽象类的区别和介绍
- Java中抽象类和接口的用法和区别
- Java中抽象类和接口的用法和区别
- Java中抽象类和接口的用法和区别
- 你真的说的清楚ArrayList和LinkedList的区别吗
- java中抽象类和接口的区别
- (转载)java中抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- 详细解析Java中抽象类和接口的区别
- 解析Java中抽象类和接口的区别
- [转]解析Java中抽象类和接口的区别
- caffe+windows7+vs2013配置
- 加载中动画(拼接图片)
- 此为主博客,会将以前的博客整理到此
- (ping、tennet、ssh、netstat)
- 第一次用xutil 记录下别人文档
- Java中接口和抽象类的区别你真的清楚吗?
- SmartUpload组件控制文件上传
- quartus ii 学习使用笔记
- iOS学习笔记:常用第三方框架
- Windows与Linux之间的文件传输方法汇总
- js 剪切板应用clipboardData详细解析
- 推荐!手把手教你使用Git
- select onchange事件
- Caffe 安装配置(CentOS + 无GPU)