抽象类和接口的区别 - 2020.06.28

一、抽象类abstract

1.包含抽象方法的类一定是抽象类;    抽象类不一定必须含有抽象方法;

2.抽象方法需要用public或protected,不能用private,因为抽象类的设计目的就是为了被继承;

抽象类的子类需要去实现父类方法;

3.抽象类不能new实例化对象(编译器都会限制了);

抽象类总结规定
1. 抽象类不能被实例化,如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。

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

3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。

4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。

5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

第3点:

第4点:

 

二、接口interface

1.接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,

用private、protected修饰会报编译错误);

 

2.接口中的方法被隐式地指定为public abstract方法

(只能是public abstract方法,用其他关键字,比如private、protected、static、 final等修饰会报编译错误),

并且接口中所有的方法不能有具体的实现。

 

3.注:隐约看出接口和抽象类的区别,接口是一种极度抽象的类型,它比抽象类更加“抽象”,并且一般情况下不在接口中定义变量。

 

4.某个类要具体实现这个接口,格式应该为

class ClassName implements Interface1,Interface2,[....]{


}

允许一个类遵循多个特定的接口。

如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法(不然编译器会报错)

对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法。

 

三.抽象类和接口的区别

(1)语法层:

1.接口类不能具体实现方法,只能给出函数名、修饰符、参数列表(不能具体实现),且只能存在public abstract方法;

而抽象类可以给出具体实现;

 

2.一个类只能继承一个抽象父类;

而一个类可以实现多个接口;

 

3.接口中不能出现静态代码块和静态方法;

而抽象类可以。

 

(2)设计层:

1. 接口是对一个类的行为(方法)进行抽象,需要子类去继承该父类,去具体实现接口中定义的方法;

抽象类是对整个类的抽象,包括属性、行为;

 

注:如果一个类继承了某个抽象类,则子类必定是抽象类的种类,而接口实现则是有没有、具备不具备的关系,比如鸟是否能飞(或者是否具备飞行这个特点),能飞行则可以实现这个接口,不能飞行就不实现这个接口。

 

2.举例:

一个抽象类(A)可能被多个子类(B、C)继承:

B、C的公共部分就是A,如果公共部分需要改动,只需要改动A就可以了,不需要再去修改B、C;

 

一个接口A,多个类对其进行实现:

如果公共部分需要改动,也要去修改B、C了;

 

总结:

对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;

而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务