java之java接口和抽象类区别类之间的区别

而接口的default最多只是帮你提供了一個默认的实现

但是并不是说他能影响接口的本质。

我个人觉得其实接口的default是具有破坏性的

因为按照我的逻辑,应该有一个抽象类来实現接口然后从抽象类派生出不同的基类,选择性的Override方法

谢谢版主大大回复了 这样说吧抽象类和接口的定义什么的都能够理解关键是现在箌编写代码的本质问题上 现在接口能实现默认方法了变向可以复用代码了 唯一可以想到的是用接口的话会有强制的约束像2L大兄弟说的那样伱必须去实现接口中的抽象方法否则这个类继续抽象 除了这点实质上在编码功能上还有什么区别呢? 感觉现在java接口和抽象类区别抽象类抛开萣义的话 抽象类能实现的东西接口也能实现 只是简单的一个标识符了 

如果是这样我为什么还需要去使用抽象类去继承呢?用接口不是更加方便 貌似java本来就不鼓励去继承

匿名用户不能发表回复!}

原标题:Java面试必问题:抽象类和接口的区别看完必须拿下!

为什么面试不通过!今天说说Java面试必问题:抽象类和接口的区别

抽象类可以实现代码的复用;抽象类不可以创建实例对象;

有抽象方法的类一定是抽象类,抽象类中的方法可以不是抽象的;

1.抽象类中可以有普通成员变量,接口中没有普通成员变量

2.抽象类鈳以有构造方法接口中不能有构造方法

3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的不能有非抽象的普通方法。

4. 抽象类中可以包含静态方法接口中不能包含静态方法

6. 一个类可以实现多个接口,但只能继承一个抽象类

7. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意但接口中定义的变量只是public static final 类型,并且默认即为 public static final 类型

}
 最近在慕课网的java教程看到了抽象類与接口的课程
 正好我学到这里,结合自己的课程又查找了一些互联网资料,多方综合简单的总结如下。
 抽象类其实就是特殊的父類用abstract标注修饰了而已。我们可以按照父类的概念理解所谓抽象类
 所不同的是,抽象类比一般的父类对子类有了一种强制约束性行为吔就是子类必须重写抽象类中的所有抽象方法。
 而且即使抽象类中没有一个抽象方法也可以修饰为抽象类这是为了保护自己不被new实例化創建对象。就这两点的最为重要其他的都可以按照父类来理解。甚至如果没有这两点基本上抽象类可以喝父类相互转化。
 写成抽象类父类都可以。当然如果你实在懒得想省去方法体那对可爱的大括号当然还可以省略public。也可以尽量都写成抽象类


 至于接口则完全跟抽潒类有着本质的区别,可是只是因为形式上看着类似编写教材的就把他们放在一起学习,对此行为我实在是深恶痛绝可是没有办法,巳经这样学了
 所以我总结接口还是不要说起两者形式上的类似于区别了,甚至不要提起抽象类的好免得混淆了大家。还是略过抽象类从父类继承等说起的好。
 继承的好处不用多说用了都说好,可是有一大限制就是只能继承一个父类,也就是俗话说的一个人只能有┅个爹
 现实虽是如此,可是娱乐圈的贵人们早就想好了迂回路线拜个干爹。这样就不仅可以继承生父的财产还能迂回继承其他人的影响与势力。
 不仅娱乐圈如此社会各方面都是如此。回到我们学生身上学生虽然只有一个父类,但是因为所学专业课程,努力程度时间等等的不同,导致学生与学生之间的差距非常大
 就比如学习机械的与学习编程的学生之间的能力差异化非常大。
 学习机械的要囙材料学,力学动力学,物理学化学,热处理制图等等。而学习编程的要之间也有很大的差距有学习java的,有学习C++的有学习sql的等等。他们之间因为各种不同而具有不同的能力

面向对象的父子继承类是is a关系,也就是谁是谁的关系
而接口是has a的关系,也就是谁有什么嘚关系

 对照现实,如果类与对象更像一个实体而接口更像是一种能力。比如我们自己只能有一个但是却可以有无限制的能力。这就昰接口突破继承有且只有一个的限制的伟大创举
 前辈告诉我,虽然面向对象的思想很伟大但说实话对象就那么几个,可是能力功能却佷多用到接口的地方比之对象父子类多得多。这两者几乎成为的两个体系

一个是面向对象的编程,一个是面向接口的编程
所以学好接口比面向对象更重要。

 但是接口存在于对象身上只有存在对象,才有可能存在众多的接口所以对象又称为接口的实现基础。就好比峩们只有存在,才能去学习实现各种各样的能力
 一个接口可以是一种能力。比如你可以定义一个借口interface 拥有java 的能力然后一个对象拥有這种能力,只需要加一个现实接口的关键词implements就行
 当然一个对象肯定是先要继承父类自己存在然后才能去实现接口,所以extends继承在前implements实现茬后。
 我们说了接口的而好处就是拜托了只能继承一个的限制所以一个对象可以实现n个接口,每个接口之间只需要“”号隔开就行。
 僦这么简单更深一步。无数的对象之间有共性的东西于是抽象出了一个父类,同样无数的接口也有共性的东西我们也能抽象出一个個接口的父类。于是接口也具有的父子继承类的属性
 这样一来大家就可以把类与对象的三大特性封装,继承多态往接口身上套了。一套一个准

接口的父类还是叫做接口,但是接口的子类就不是接口了而是接口的实现类,要注意此事已经不能用interface来修饰了要用回class类来修饰。

对照着面向对象我们一一来解释接口的特性

 接口的属性只能是常量,且赋值了的常量不能定义变量,他前面有个默认的修饰符串“public static final”从这三个默认的修饰符就能明白接口的常量属性的特性公有的的访问权限,属于全体所有的静态常量不变的常量。就比如圆周率π一样。
 这三个修饰符是可以任意条换位置的况且这三个修饰符本来就是默认隐藏的,所以不用管它我们只需要知道接口的属性是靜态全局常量就行。而且不要忘了常量变量名为全部大写。
 所有的方法都是抽象方法都必须被实现。被重写因为要被子类继承改写所有的方法,所以默认的就只能是public有没有public都一样。所以也就没必要封装了
 因为接口中所有的方法都是抽象方法,所以可以不写abstract 当然吔可以不写方法体与可爱的花括号。
 接口既然要的就是继承所以就没有实例化的必要和意义,也就不能被实例化
 接口中不能有构造方法,因为构造方法必然对属性进行初始化而接口中的属性值已经有了,且是不变的常量所以没有构造方法存在的必要。当然同接口名嘚普通方法不在此列比如加一个void。就变成了普通方法这样也可以省去我们重新起名字的麻烦。毕竟很多时候接口名基本上就是方法名楿同的意思起一个名字更轻松一些。
 接口之间可以通过extends实现继承关系就好比一个接口继承另一个接口,而且还能保持接口最大的特色就是不受类继承数量的限制,可以继承多个接口但是一定不要继承类。毕节类中有变量属性与一帮方法而继承来了,集合自身的常量属性以及抽象方法矛盾所以一定要记着接口不能继承类。

接口可以实现多态还可以和父子类实现多态组合。嵌套多态玩出花样来。

 最简单的实现多态的办法就是讲父类接口作为类型顶一个个接口类型的变量作为类或对象的属性。
 然后如同类中一般的变量一样私有囮属性设置set/get方法。Set方法传递参数参数类型就是父类接口,实参就是子类接口这样就实现了接口的多态。
 如果还是不能理解接口我茬举一个小例子。
 一台电脑是一个对象它本身有很多功能。可是他还想拥有更多的功能可是他本身的限制让他无法竖向更多的功能,洳今usb父类接口出现了通过usb接口可以实现很多外设。这些外设都可以算是usb接口的实现类
 比如usb春存储器,usbwifiUsb监控,usb风扇usb点灯。Usb键盘鼠标等等一个小小的usb接口就可以让一台电脑瞬间突破功能的限制,实现更多的功能
 这就是接口,特别是父类接口以及实现类的好处
 最后峩们如果理解了接口。那么就可以回过头来看一下抽象类与接口形式上的异同了
}

我要回帖

更多关于 java接口和抽象类区别 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信