抽象类
包含抽象方法的类,用abstract修饰
抽象方法:只有方法声明,没有方法体的方法,用abstract修饰
当需要定义一个方法,却不明确方法的具体实现时,可以将方法定义为abstract,具体实现延迟到子类,子类中必须重写该方法。
例如:public abstract void eat();
特点:
1.必须用abstract修饰
1)修饰符 abstract 类名{}
2)修饰符 abstract 返回类型 方法名{}
2.抽象类不能被实例化,只能由具体的子类实例化,创建子类对象
3.抽象类子类的两个选择:
1)重写父类的所有抽象方法
2)定义成抽象类
4.成员变量
1)可以有普通的成员变量
2)也可以有成员常量
5.成员方法
1)可以有普通方法,也可以有抽象方法
2)抽象类不一定有抽象方法,有抽象方法的类一定是抽象类(或接口)
6.像普通类一样有构造方法,可以重载。
优点:定义一个抽象类类型的引用P,可以通过P引用子类所实现的抽象方法。
还有一个优点就是,如果我们没有使用抽象类,那么子类可以不重写父类的方法,而使用抽象类普通类必须实现父类的所有抽象方法。
接口
接口技术用于描述类具有什么功能,但是不给出具体实现,类要遵从接口描述的统一规则进行定义,所以接口是对外提供的一组规则、标准。
接口用关键字interface表示
格式:interface{}
类实现接口用implements表示
格式:class 类名 implements 接口名{}
接口没有成员变量,只有公有的、静态的常量。
接口不能实例化,也没有需要初始化的成员,没有构造方法。
接口是特殊的抽象类,里面全是抽象方法,没有普通方法
接口中定义的变量会默认加上public abstract
1.接口不能实例化,需要创建其子类对象来完成实例化操作,即接口的多态。
2.接口的子类
1)如果是普通类,则必须重写接口中所有的抽象方法
2)如果是抽象类则不用重写接口中的抽象方法
3.接口和类的关系
1)类与类之间
继承关系只能单继承,不能多继承,可以多层继承
2)类与接口之间
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
3)接口与接口之间
继承关系,可以单继承,也可以多继承
4)对于一个类来讲,它的父类(继承的关系)中定义的都是:共性内容
5)对于一个类来讲,它的接口(实现的关系)中定义的都是:扩展内容