和老师聊了几个小时后,明白自己最近学习方面的广度是够了,但深度确还差着很大的火候。所以开始着手一些身边的基础问题。今天我来说说自己关于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.抽象类是一种模板设计,而接口是一种行为规范,是一种辐射式设计。
对于一个模板式设计的抽象类中的方法而言,我们只需要修改模板中的方法,那么所有子类的方法就能更新。而对于辐射式设计的接口中的方法,需要在所有实现类中修改,才能得到更新,互不相干。
这是我目前的见解,如有不正确的地方,请各位指正。