【Java】抽象类和接口的区别

来源:互联网 发布:python里的三引号 编辑:程序博客网 时间:2024/06/16 21:51
一、抽象类&抽象方法
a)概念

1、Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。

2、抽象方法即只有功能声明,没有功能主体实现的方法。

3、抽象类用来描述一种类型应该具备的基本特征与功能,例如:狼和狗共性都是犬科,犬科就是抽象出来的概念。而犬科描述了所有的犬科子类应具备的属性和行为。

4、具体如何去完成这些行为由子类通过方法重写来完成,如:狼和狗都有吼叫的方法,可是吼叫内容方式不同。所以抽象出来的犬科虽然有吼叫功能,但是并不明确吼叫的细节。

b)抽象定义格式
使用abstract修饰抽象类与抽象方法
//abstract在class前修饰类//abstract在访问权限后,返回值类型前修饰方法,方法没有方法体。abstract  class  Person {public abstract void  eat();}


c)抽象类&抽象方法的使用

抽象类无法直接创建对象,只能被子类继承后,创建子类对象。

1、子类定义时继承抽象类

抽象类是事物的描述,子类需要继承父类完成最终的功能实现细节(即重写方法,完成方法体)。

将一个抽象方法重写的过程也叫实现方法的过程。

2、子类定义后创建实例对象

在定义好子类后,可以直接创建对象。在所有使用子类的地方可以传入子类对象,在所有使用父类的地方也可以传入子类对象,因为属性与方法在子父类中都是相同的。


二、接口

a)概念

1、接口是功能的集合,是比抽象类更为抽象的类,同样是一种数据类型。

2、接口的更为抽象表现为其内的所有方法均为抽象方法。同时不定义普通的成员变量。

3、使用时,接口同样不能创建对象,只能在定义时实现接口。接口只能实现,不能继承。实现的动作类似继承,只是关键字不同,实现使用implements。

4、Java支持继承一个类的同时实现多个接口。

5、像父类一样,所有定义接口的地方,也可以传入其实现类对象(子类对象)。

b)定义格式

使用interface代替了原来的class,其他步骤与定义类相同。

<strong><span style="font-size:18px;">public interface 接口名 {//抽象方法1;        //抽象方法2;        //抽象方法3;}public interface Careable {public abstract void carCare();}</span></strong>


c)使用格式

在具体定义类时实现接口,必须重写(实现)所有抽象方法

或者定义抽象类,可以留下若干抽象方法不实现。

class 类 implements 接口1,接口2{}

 如:

class Tesla implements  Careable {public void carCare() {System.out.println(“不去汽车保养店,去专业Tesla保养店!”);}}

三、区别

1、Java支持一个类同时实现多个接口(接口是干爹,抽象类是亲爹,亲爹只能有一个,而干爹可以有很多),类可以在继承一个类的同时,实现多个接口。

2、接口中的成员是固定的:

变量修饰符为:public static final

方法修饰符为:public abstract(所以重写接口方法时,必须使用public)

即接口是更加抽象的抽象类,她的成员方法必须全部为抽象方法。

3、在意义上说,抽象类的方法是指一类相似的对象共有的一些功能,而接口是指额外的一些功能。

0 0
原创粉丝点击