1.抽象类
当父类的某些方法需要声明,但不确定怎么实现时,可以将其声明为抽象方法,这个类就是抽象类。
翻译过来就是说父类的一个方法自己不知道怎么实现,而是需要同时被多个子类分别重写时,可以将这个方法声明为抽象方法(类中有抽象方法时,必须将该类也声明为抽象类;抽象类不一定要包含抽象方法)
可能有同学要说了,还是太模糊啦~~
举个例子喽~~~
这是父类,cry()方法就是抽象方法,需要注意的是抽象方法没有方法体
子类cat和dog重写了cry()方法
下面是一些重要的细节~~~
1.抽象类不能被实例化,抽象类不一定要包含抽象方法且可以有普通方法
抽象类A不能创建对象,new A()会报错
2.如果一个类继承了抽象类,它必须实现抽象类的所有抽象方法,除非它自己也声明为抽象类
F和G要继承抽象类E,F声明为了抽象类,G继承了E的所有抽象方法
3.抽象方法不能使用private、final、static来修饰(和重写违背)
子类要继承,而这些关键词和重写是相违背的
4.Abstract只能修饰类和方法,不能修饰其他
5.抽象类的本质还是类,可以有任意成员(非抽象方法、构造器、静态属性等)
以上就是抽象类啦~~~
2.接口
接口就是将一些没有实现的方法封装到一起,某个类要使用的时候,在根据具体的情况把这些方法写出来。
语法:
interface 接口名{
//属性
//方法
}
下面就是一个接口,接口中的抽象方法可以省略abstract
一个类通过implements 来实现一个接口,如下,A实现了接口AInterface,继承接口的类必须实现接口的所有抽象方法
注意Jdk8.0后接口中可以有默认方法,但需要使用default关键字;可以有静态方法
以上就是接口的使用方法啦,那什么时候用接口呢~~~
例如,经理要开发一个软件,为了方便管理可以定义一些接口将任务分配下去,由程序员具体实现。三个程序员编写三个类,分别完成对不同数据库的连接。
这是接口
这是一位程序员通过实现接口对mysql数据库连接的实现,其他同理
以下是接口的注意细节:
1.接口不能被实例化
2.接口中的方法是public 方法,接口中的属性只能是final,而且是public static final 修饰符
IB.n1可以实现就说明n1是static
IB.n1=30 报错 就说明为final
3.抽象类实现接口时,可以不实现接口的抽象方法(如果该类实现了接口中的部分方法时,还有部分方法没有实现,没有实现的部分方法继续以抽象方法的形式存在该类中,则该类为抽象类。这样做的目的是:当另一个类继承这个抽象类时,可以通过这个抽象类达到只实现接口中部分方法的目的)
4.一个类可以实现多个接口,接口之间可以相互继承