Abstract抽象类:
如果一个class类中定义了某个方法,该方法没有具体的方法体,那么这个方法就是抽象方法,抽象方法用abstract来修饰,而抽象方法无法执行,所以这个类也必须定义为抽象类。
1.抽象类的特点:
①.抽象类和抽象方法必须使用abstract关键字修饰
public abstract class 类名{}
②.抽象类中不一定有抽象方法,但是又抽象方法的类一定是抽象类。
③.抽象类不能实例化
④.抽象类的子类要么是抽象类,要么重写抽象类中的所有方法
2.抽象类成员方法特点
①.成员变量:抽象类的成员变量可以是变量,也可以是常量
②.构造方法:有构造方法,但是不能实例化
构造方法的作用:用于子类访问父类数据时初始化父类数据
③.成员方法
a.抽象方法:限定子类必须完成某些方法的重写
b.非抽象方法:提高代码的复用性
Interface接口
如果一个抽象类中没有成员变量,并且所有的方法都是抽象方法
abstract class Student{
public abstract void doSth();
public abstract String getName();
}
这样,我们就可以把该抽象类定义为interface接口
interface Student{
void doSth();
String getName();
}
所谓的接口,就是比抽象类还要抽象的一种纯抽象的代码结构。
1.接口的特点
①.接口用interface关键字修饰
public interface 接口名{}
②.接口有实现类,接口的实现类用implements表示
public class 类名 implements 接口名{}
实现类要么重写接口中的方法,要么是抽象类,实现类可以不必重写default方法
③. 接口不能实例化
2.接口的成员特点
①. 成员变量只能是常量
默认修饰符:public static final
②. 构造方法
接口中没有构造方法,因为接口主要是对行为的抽象,是没有具体存在的
③. 成员方法,只能是抽象方法
默认修饰符:public abstract
类和接口的关系
a. 类和类的关系:继承关系,只能单继承,但是可以多层继承
b. 类和接口的的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
抽象类和接口的区别
abstracct class 抽象类 | interface接口 | |
定义 | 使用abstract class关键字定义抽象类 | 使用interface关键字定义接口 |
继承 | 只能extends继承一个class类 | 可以implements多个interface接口,并且接口之间允许多重extends继承 |
成员变量 | 可以定义成员变量 | 不能定义成员变量 |
常量 | 使用static final关键字定义 | 无需任何关键字,只能定义常量 |
抽象方法 | 可以定义抽象方法 | 可以以定义抽象方法 |
非抽象方法 | 可以定义非抽象方法 | 可以定义default方法 |
构造方法 | 可以定义构造方法 | 不允许有构造方法 |
访问修饰符 | 可以使用任意访问修饰符 | 只能使用public访问修饰符 |