抽象类
1.没有方法体的方法叫做抽象方法,被abstract关键字修饰
2.用abstract修饰的类成为抽象类,如果一个类中包含抽象方法,那么这个类必须被声明为抽象类
3.当子类继承了抽向父类以后,要么变成一个抽象子类,要么实现父类的所有抽象方法
4.抽象类不可以创建对象/实例化
特点
1.abstract 可以修饰方法或者类
2.被abstarct修饰的类叫做抽象类,被abstract修饰的方法叫做抽象方法
3.抽象类中可以没有抽象方法
4.如果类中有抽象方法,那么该类必须定义为一个抽象类
5.子类继承了抽象类以后,要么还是一个抽象类,要么就把父类的所有抽象方法都重写
6.多用于多态中
7.抽象类不可以被实例化
抽象类中构造函数的用法
1.抽象类中可以有构造方法
2.父类的构造方法优先于子类执行
3.抽象类不可以实例化
4.抽象类中存在构造方法不是为了创建本类对象时调用的,而是为了创建子类对象时调用
抽象类中的成员
1.抽象类中可以有成员变量
2.抽象类中可以有成员常量
3.抽象类中可以有普通方法
抽象类中可以都是普通方法
4.如果一个类中都是普通方法,为啥还要被声明抽象类?
原因:抽象类不可以创建对象,所以如果不想让外界创建本类的对象,就可以吧普通类生命成抽象类
5.抽象类中可以有抽象方法,一旦类中有抽象方法,这个类必须被声明成一个抽象类
注意
抽象方法要求子类继承后必须重写。
1.private:被私有化后,子类无法重写,与abstract相违背。
2.static:静态优先于对象存在,存在加载顺序问题。
3.final:被final修饰后,无法重写,与abstract相违背
接口
1.我们通过interface关键字来定义接口
2.接口中不可以有普通方法
3.接口中的方法都是抽象方法
5.接口不能创建对象
1.接口之间可以建立继承关系,而且还可以多继承,接口与接口之间用逗号隔开
2.接口和实现类之间可以建立实现关系,通过implement关键字来完成
注意,java类是单继承,而接口不限,写接口时,我们一般先继承再实现
实现类如果想和接口建立实现关系,通过implement关键字来建立
方案一:如果实现类与接口建立关系以后,可以选择不实现接口中的抽象方法,而是把自己变成一个抽象子类
方案二:实现类可以实现接口中的所有抽象方法