抽象类和接口的区别

来源:互联网 发布:淘宝金丝绒太极服 编辑:程序博客网 时间:2024/06/06 04:50

抽象类和接口的区别

一、       抽象类定义

在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

定义一个抽象类

abstract class vehicle{

   public abstract void WheelNum();

}

二、       接口定义

所谓接口,就是指的由常量和抽象方法所组成的特殊的类。接口内的成员变量都被定义为常量,成员方法是没有方法体的抽象方法。

我们定义一个接口(体现交通工具的轮子数量)

 interfacevehicle{

 public void WheelNum();

}

三、       抽象类和接口的对比

  相同点:

1.        抽象类和接口都和类有继承关系,都只能通过继承来实现具体的功能。

2.        抽象类和接口都可以有自己的数据成员,抽象方法。

3.        抽象类中的抽象方法和接口里的抽象方法都必须被重写实现。

不同点:

1.  多继承和单继承的关系是最本质的区别

接口是多继承的关系,接口与接口之间是多继承的,类与接口之间是多实现的关系,而抽象类是一个类,由类对他进行单继承,不能多继承,接口不能继承抽象类,但是抽象类可以实现多接口;接口不能继承类或抽象类,但是抽象类可以继承抽象类和普通类。

 

现在我们来定义一个轿车和自行车的启动方式
如果用抽象类

abstract class Car{
   public abstract void gas();
}


abstract class Cycle{
   public abstract void manPower();
}

现在有一个人既想开轿车又想骑自行车,用抽象类就实现不了了

但是用接口就非常容易。

interface Car{
   public void gas();
}

interface Cycle{
   public void manPower();
}


class Person implements Car,Cycle{
  public void gas(){}
  public void manPower(){}
}

 

2.   在抽象类中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的

3.   抽象类中可以有非抽象方法。子类可以选择继承该非抽象方法,也可以选择继承。但接口中则不能有实现方法,且接口中所有的抽象方法都必须被实现。

4.   接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

5.  抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 

6.   接口中的方法默认都是 public,abstract 类型的

7.   .abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。


 

 
 

0 0
原创粉丝点击