1.抽象类:1>概念:父类中的方法不确定如何进行{}内方法体的实现,则为抽象方法;
2><1>抽象方法:public abstract void eat();
<2>抽象类:抽象方法所在的类,必须是抽象类,抽象类中可以有普通的方法
public abstract class Animal{}
3>使用抽象类和抽象方法步骤:<1>抽象类里不能直接new抽象对象;
<2>必须用一个子类继承父类的所有抽象方法;
<3>子类需要覆盖重写父类所有的抽象方法;
(子类去掉抽象方法的abstract关键字,补上{})
<4>创建子类对象进行使用。
4>注意:<1>抽象类不一定有抽象方法,但抽象方法一定在抽象类里;
<2>抽象类里可以有构造方法,是供子类创建对象时,初始化父类成员。
2.抽象类例题(发红包):
3.接口:1>概念:多个类的公共规范,是一种引用类型,字节码文件仍然为.class;
2>格式:public interface 接口名称{ //接口内容;}
3>包含:<1>抽象方法:- public abstract void methodAbs();
// public abstract不能变,抽象方法后面不能加{}
- 使用步骤:- 接口不能直接使用,要有一个“实现类”来“实现”接口;
public class 实现类名称 implements 接口名称{...}
- 接口的实现必须覆盖重写接口中所有的抽象方法,删
abstract关键字,加{};con+O对抽象方法进行覆盖重写
- 创建实现类的对象,进行使用;
<2>默认方法:public default 返回值类型 方法名称(参数列表){方法体}
// 用来解决接口升级的问题,默认方法会被实现类继承,让实现类的对象直接调用;
默认方法也可以被接口实现类进行覆盖重写;
<3>静态方法:- public static 返回值类型 方法名称(参数列表){方法体}
- 不能通过接口实现类的对象来调用接口中的静态方法;
- 调用静态方法格式:接口名称.静态方法名(参数);
<4>私有方法:普通私有方法:解决多个默认方法之间重复代码的问题;
private 返回值类型 方法名称(参数列表){方法体}
静态私有方法:解决多个静态方法之间重复代码的问题;
public static 返回值类型 方法名称(参数列表){方法体}
<5>常量:public static finial int num = 10;
//finial后的内容不可变,且接口中的常量必须赋值,常量这里用大写并使用下划线NULL_OF_CLASS;
4>小结:<1>接口没有静态代码块;
<2>没有构造方法(构造方法可以直接new);
<3>一个类的直接父类是唯一的,但一个类可以同时实现多个接口
//public class MyInterfaceImpl implements MyInterfaceA, MyInterfaceB{(overri A B的构造方法)};
<4>一个类如果直接父类的方法与接口中的默认方法冲突,优先父类的方法,即继承优先于接口;
<5>若实现类实现的多接口中存在重复抽象方法,只需要覆盖重写一次就行;
<6>若实现类没有覆盖重写所有接口的所有抽象方法,则实现类必须是一个抽象类;
<7>若实现类实现的过接口中,存在重复的默认方法,则实现类要对冲突的默认方法覆盖重写;
5>类和接口的关系:<1>类之间是单继承的;
<2>类与接口是多实现的,一个类可以实现多接口;
<3>接口之间是多继承的;
<4>多个父接口的抽象方法可以重复;
<5>默认方法重复,子接口则需要带着default对默认方法进行覆盖重写。