抽象类和接口的理解
抽象类(abstract class):
public abstract class Demo1{}
抽象类中的抽象方法需要被继承(extends)重写,实现方法的实例化;
抽象类可以存在构造器,抽象方法和具体方法;修饰符为public、default、protected和private;可以定义成员变量;
接口(interface):
public interface Demo2{}
接口中的方法均为默认的public抽象方法,需要实现(implements)重写进行实例化;接口中不能定义构造器;定义的成员变量均为常量;
DAO就是数据库或其他持久化机制提供抽象接口的对象,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。
比如springBoot的mapper接口和实现数据存储的mapper.xml
拓展:
a、接口可以继承接口,可以多重继承,抽象类可以实现接口,抽象类可继承具体类也可以继承抽象类。
b、重写和重载
方法重写:子类继承父类并重写父类中已有的或抽象的方法,实现的是运行时的多态性;重写时,方法名和参数部分一定是相同的,访问修饰符范围要大于等于父类,因为子类重写父类方法是为了扩展父类的功能;返回值类型如果是基本数据类型和void类型,则必须相同。引用数据类型的话范围要小于等于父类。
方法重载:发生在一个类中,实现的是编译时的多态性;重载的方法为名称相同,但传参的参数类型不同、参数个数不同或者二者都不同。
重载主要体现在构造器,类中和构造器同名的方法,他们之间为重载。
构造器:方法名和类名相同,没有返回值,并且不能用void,参数可有可无。如果类中没有带参数的构造器,那我们可以使用一个隐藏的默认构造器来创建对象,如果类中有带参数的构造器,那默认的构造器就会被覆盖