Java接口和抽象类的区别

java问题王 Java每日一问 发布时间:2021-10-25 11:48:35 阅读数:5661 1
下文笔者将讲述java中接口和抽象类的区别说明,如下所示:
类是对象的模板
抽象类和接口是一个类的模板
接口可以理解为一个特殊的抽象类
接口和类的相同点:
   1.两者都不能实例化
   2.都能包含抽象方法

接口同抽象类的区别:

抽象类中可以有部分方法的实现,子类中可不实现这些方法,可提高代码的重用性
接口中只能包含抽象方法,最多只能有一个default的实现方法
例:
public abstract class A{
 public abstract void method1();
 public void method2(){
  //A method2
 }
}
public class B extends A{
 public void method1(){
  //B method1
 }
}
public class C extends A{
 public void method1(){
  //C method1
 }
}
以上抽象类A有两个子类B、C
A中有方法method2的实现
子类B、C中不需要重写method2方法,method2就是代码可重用的例子
A并没有定义method1的实现
B、C可根据自己的特点实现method1方法
public interface A{
 public void method1();
 public void method2();
}
public class B implements A{
 public void method1(){
  //B method1
 }
 public void method2(){
  //B method2
 }
}
public class C implements A{
 public void method1(){
  //C method1
 }
 public void method2(){
  //C method2
 }
}
接口A无法为实现类B、C提供公共的功能
A无法约束B、C的行为
B、C可以自由地发挥自己的特点现实 method1和 method2方法,接口A毫无掌控能力。

一个类只能继承一个直接的父类(可能是抽象类),但一个类可以实现多个接口

interface A{
 public void method2();
}
interface B{
 public void method1();
}
class C implements A,B{
 public void method1(){
  //C method1
 }
 public void method2(){
  //C method2
 }
}
//可以如此灵活的使用C,并且C还有机会进行扩展,实现其他接口
A a=new C();
B b=new C();
abstract class A{
 public abstract void method1();
}
abstract class B extends A{
 public abstract void method2();
}
class C extends B{
 public void method1(){
  //C method1
 }
 public void method2() {
  //C method2
 }
}
综上所述
接口和抽象类有各自的优缺点,选择接口还是抽象类上,我们将遵循一下原则:
行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaProblem/202110/1571.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者