本文共 1931 字,大约阅读时间需要 6 分钟。
小咸儿在重新学习Java基础的时候,看到有关接口和抽象类的知识,特此总结下来。
什么是抽象类,就小咸儿的话来说,就是一般类,将特殊类中共同的部分抽象出来,并且方法不提供具体实现的类。
public abstract class Shape{ public abstract String getType();}
有得有失
抽象方法是只有方法签名,没有方法实现的方法。
抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义成抽象类,抽象类里可以没有抽象方法。
定义了方法体,只是方法体为空。
public void test() {}
在这里小咸儿对于abstract修饰符的使用多总结一点:
接口,通俗来讲,更像是一种规范。他不关心类的内部状态数据,也不关心类里面方法的实现细节。只要类中提供了规定的方法即可。
设计哲学
规范和实现分离
public interface Output{ // 接口里定义的成员变量只能是常量 int MAX_CACHE_LINE = 50; // 接口里定义的普通方法只能是public的抽象方法 void out(); void getData(String msg); // 在接口中定义默认方法,需要使用default修饰 default void print (String... msgs) { for (String msg : msgs) { System.out.println(msg); } } // 在接口中定义默认方法,需要使用default修饰 default void test() { System.out.println("默认的test()方法"); } // 在接口中定义类方法,需要使用static方法 static String staticTest() { return "接口里的类方法"; } // 定义私有方法 private void foo() { System.out.println("foo私有方法"); }}
他们的区别,主要体现在两个方面,其一是设计目的,其二是用法。
设计目的
接口体现的是一种规范,类似系统的“总纲”
抽象类体现的是一种模板设计,类似系统实现过程中的中间产品
用法
接口里只能包含抽象方法、静态方法、默认方法和私有方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法。
接口里只能定义静态常量,不能定义普通成员变量;抽象类里两者均可。
接口里不包含构造器和初始化块。而抽象类二者均包含,需要注意的是:抽象类里的构造器是为了让子类调用这些构造器来完成属于抽象类的初始化操作。
抽象类只能有一个直接父类,但是可以直接实现多个接口。
转载地址:http://wjerb.baihongyu.com/