简述Java中抽象类和接口,及其两者区别_My_name_is_ZwZ的博客-CSDN博客_抽象类和接口的区别
抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是 private、默认、protected、public 的,而接口中的成员全都是 public 的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。
1.抽象类
用abstract修饰的类叫做抽象类。
在讲抽象类之前有必要强调一下abstract修饰符:
1.abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new);
2.abstract修饰的方法为抽象方法,此方法不能有方法体(就是什么内容不能有);
关于抽象类的使用特点:
1.抽象类不能有对象,(不能用new此关键字来创建抽象类的对象);
2.有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;
3.抽象类中的抽象方法必须在子类中被重写。
同学们可能会问到:抽象类不能被“new”,抽象方法必须重写,那么定义它们做什么嘞?
答:抽象类生来就注定它是要被继承的,如果没有任何一个类去继承它的话,那么也就失去了它的意义;抽象方法生来就是要被重写的,而且是必须重写。(只要继承了某个抽象类,就必须去重写此抽象类中含有的抽象方法)
细心地同学可以看得出,在cat和person这两个类中都含有了sleep和eat这两个方法,但是它们的方法体却不一样。重点就在这里,假设不定义animal这个抽象类以用来让cat和person去继承的话,虽然也要在cat和person中定义sleep和eat这两个方法,看似代码上没有太多简化。但是这背后却隐藏着一个规范问题:也就是“是不是”的问题。cat和person都“是”animal,所以就必须继承animal里面的方法。相当于提供了一个大的体制。就好比人:人活着就必须要遵守国家的法律,而至于你信仰佛,还要遵守“佛法”,你信仰共产党,你还要遵守党章和党纪。那就是你自己的事情了
2.接口
接口就是一个规范和抽象类比较相似。它只管做什么,不管怎么做。通俗的讲,借口就是某个事物对外提供的一些功能的声明,其定义和类比较相似,只不过是通过interface关键字来完成
其中重要的几个知识点:
1.接口中的所有属性默认为:public static final ****;
2.接口中的所有方法默认为:public abstract ****;
3.接口不再像类一样用关键字 extends去“继承”,而是用 implements 去“实现”,也就是说类和接口的关系叫做实现,(例如:A类实现了B接口,那么成为A为B接口的实现类。而类与类之间的继承的话,叫做A类继承了B类,其中B类即为A类的父类)。实现接口与类的继承比较相似