一起来搞明白JAVA抽象类和接口

和老师聊了几个小时后,明白自己最近学习方面的广度是够了,但深度确还差着很大的火候。所以开始着手一些身边的基础问题。今天我来说说自己关于JAVA抽象类和接口。

抽象类:

定义:有abstract修饰的类,我们称之为抽象类 如: abstract class Test{}; 。

方法:抽象类可以有具体方法和抽象方法 。 抽象方法如: abstract void play(); 。

变量:和普通类一样。

抽象方法和抽象类的联系:有抽象方法的类一定为抽象类,抽象类不一定有抽象方法。

和普通类的区别:

1.不能创建对象。

2.一般类继承了抽象类必须实现抽象方法。

3.抽象方法修饰词 必须为 public 或者 protected。

接口:

定义:非常抽象的类型,类型为Interface 修饰。如: public Interface Test(){};

方法:必须为抽象方法。修饰词必须为 public abstract。

变量:修饰词必须为 public static final 。

抽象类和借接口的区别(语法层面):

1. 接口的方法 只能为 public abstract 的抽象方法,而抽象类 既可以有抽象方法 也可以有一般方法。

2.接口的成员变量只能为只能为public final static 修饰,而抽象类则没有限制,可以有一般的变量。

3.JAVA8 以前 接口中不能有静态代码块和静态方法 ,而抽象类可以有静态代码块和方法。 注意:JAVA8 中的接口中可以有静态方法,但是必须有body。

4.普通类只能继承一个抽象类,但可以实现多个接口。

抽象类和借接口的区别(设计层面):

1.抽象类是对事物的抽象 ,接口是对行为的抽象。

如网上所说,抽象类是用来判断一个对象是不是属于某个类,而接口是用来分析一个对象是否具有某项技能或功能。列子:

我们程序员继承了人这个抽象类,然后实现了技能接口中编程的方法。

2.抽象类是一种模板设计,而接口是一种行为规范,是一种辐射式设计。

对于一个模板式设计的抽象类中的方法而言,我们只需要修改模板中的方法,那么所有子类的方法就能更新。而对于辐射式设计的接口中的方法,需要在所有实现类中修改,才能得到更新,互不相干。

这是我目前的见解,如有不正确的地方,请各位指正。

经验分享 程序员 微信小程序 职场和发展