说起来惭愧,前几天突然被这个问题难住了,自己还是没有完全地理解,不能够回答地全面,今晚想起来就把它记下来吧。
1.理解抽象类。
为什么使用抽象类?为更好地实现继承与多态,起到承上启下的作用。将事物共同的东西提取出来,抽象出一个更高层的类,这样更利于代码的复用。
抽象类是使用访问修饰符abstract修饰的类。抽象类中有多个抽象方法,也可以有非抽象的方法。相反,有抽象方法的类一定是抽象类。抽象方法的特点是没有方法体。
抽象类是不能被实例化的。例如:父类Animal拥有Dog和Cat两个子类,代码Animal animal = new Animal("仔仔"); animal.eat();这样是无意义的,因为你不知道具体的对象谁,是Dog还是Cat并不能确定,所以实例化是无意义的,JAVA中使用抽象类来限制实例化。
父类中的抽象方法必须要被继承的子类实现,除非子类也是抽象方法。
2.理解接口。
接口可以理解是一种能力。只需要声明能力是什么,具体怎么做并不需要声明。也就是说,接口中的方法也是抽象方法,也就是!接口是一种纯抽象类。
创建接口使用interface关键字,实现接口则使用implements关键字。
同抽象类一样,接口不能被实例化,实现类必须要实现接口中所有的方法。
但是,接口还有自己的特点。
接口中无构造方法。而抽象类是可以有构造方法的,抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。
实现类可以实现多个接口,这也是我们经常使用接口的重要原因。
接口中的变量都是全局静态的常量,方法也是全局抽象方法。
使用接口更利于代码的维护,更自然地使用多态,更容易地搭建程序框架。