抽象类与接口的比较

  • Post author:
  • Post category:其他



目录


一.抽象类


1、抽象类的定义


2、抽象类无法创建对象


3、抽象类的包含内容


4、注意


二.接口


1、接口的概念


2、接口的定义


3、接口可以实例化对象吗?


4、接口中的包含内容


5、注意


三、抽象类和接口之间的区别


四.抽象类和接口的相同点


五.何时用抽象类?何时用接口?


一.抽象类




1、




抽象类的定义






类和类之间具有共同特征,将这些共同



特征提取



出来,形成抽象类。





2、




抽象类无法创建对象






使用抽象类时,写代码可以使用



多态



(父类型引用指向子类型对象)





3、抽象类









包含




内容






① 一般方法、静态方法和



抽象方法



,且抽象方法必须在抽象类中









静态变量



和成员变量


abstract class AbstractTest01{  
    int a;                              // 成员变量  
    static int b;                       // 静态变量  
    public abstract void doSome();      // 抽象方法(只有行为的概念,没有具体的行为实现)  
    public void doAnother(){            // 普通方法  
        ......  
    }  
    public static void doOther(){       // 静态方法  
        ......  
    }  
}  




4




、注意






抽象类




中,可以




有构造方法,




是供子类创建对象时,初始父类成员使用的。



抽象类中,不一定包含抽象方法,但是有抽象方法的类必定是抽象类。

抽象类的子类,必须重写抽象父类所有的抽象方法。

二.接口

接口是特殊的抽象类,即只包含抽象方法的抽象类。

Public static final int speed =100;

Public void run();

1、接口的概念

接口是一种公共的规范标准。只要符合标准,就可以大家通用。

例:生活中的电源插座当中的电源接口,U盘,打印机,USB小风扇

接口可看作特殊的抽象类(接口是完全抽象,抽象类是半抽象)。接口是一种引用数据类型,编译后也是一个

.class

字节码文件。

2、接口的定义






  1. public








    interface






    接口名称{





  2. //接口内容





  3. }


3、接口可以实例化对象吗?

由于接口是抽象类的特例,因此接口中也无法实例化和创建对象。使用接口时,写代码可以使用多态(父类型引用指向子类型对象),这里即接口作为父类。

4、接口中的包含内容

Java7:包含抽象方法和常量。

Java8:包含抽象方法,常量,默认方法,静态方法。

Java9:包含抽象方法,常量,默认方法,静态方法,私有方法。

接口中的方法默认是 public abstract 类型,可省略;

接口中的变量默认是 public static final 类型,可省略。

5、注意


当一个非抽象类实现接口,必须将接口中所有的抽象方法全部重写。

接口支持多继承,一个接口可以继承多个接口,一个类可以同时实现多个接口。

三、抽象类和接口之间的区别

比较点

抽象类

接口

变量

无限制

必须是public,static和final

构造方法

子类通过构造方法链调用构造方法

没有构造方法

方法

既可以含普通方法也可以含抽象方法

只能含抽象方法,且必须是public的

关键字

abstract class

interface

称呼

拓展时用extends关键字,称之为继承

Implements,称之为实现

继承/实现

只能被类或抽象类继承

既可以被接口继承,也能被类或抽象类实现。

多重继承

不支持

可以继承多个父接口

定义抽象类的关键字是abstract class,而定义接口的关键字是interface。

public interface E{  
       public abstract String howToEat( );  
}  

继承抽象类的关键字是extends,而实现接口的关键字是implements。

继承抽象类支持的是单继承,而实现接口可以多实现。

public interface MyInterfaceB {  
    public abstract void methodB();  
      
    public abstract void methodCommon();  
}  

抽象类中可以有构造方法,而接口不可以有构造方法。

interface A{  
    public A( ) {//错误写法Interfaces cannot have constructors  
          
    }  
    void doSome();  
}  

抽象类变量没有限制,而接口中必须是public,static和final。

四.抽象类和接口的相同点

1.都不能被实例化

2.都能包含抽象方法

五.何时用抽象类?何时用接口?

抽象类一般是对“特征”的抽象。

接口一般是对“行为”的抽象。

通常,推荐使用接口而非抽象类,因为接口可以为不相关类定义共同的父类型,接口比类更加灵活。

抽象类适合用来定义某个领域的固有属性,也就是本质,接口适合用来定义某个领域的扩展功能。



版权声明:本文为m0_62593981原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。