面向对象(14-1):接口
面向对象(14-1):接口
1、接口概述
现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。
而这些额外的动作,并不是所有猫或者狗一开始就具备的,这些功能属于后天经过
特殊的培训训练出来的。所以,这些额外的动作定义到抽象动物类中就不合适,
定义到具体的猫或者狗中也不合适,因为只有部分猫狗具备这些功能。
所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,
并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可
接口:interface
接口是用实现:implements
类是用继承:extends
2、接口的特点
1、接口使用关键字:interface
定义格式:interface 接口名{}
案例:
//定义一个接口,表示钻火圈
interface DrillFire{
//创建一个没有具体实现的方法
public void zuanHuo();
}
2、类实现接口
定义格式:class 类名 implements 接口名{}
案例 :
//定义训练过的具体的猫类,实现钻火圈接口(关键字:implements)
class TrainCat implements DrillFire{
//实现接口里面的方法 Alt+Enter
@Override
public void zuanHuo() {
System.out.println("猫钻火圈");
}
}
3、接口不能实例化
错误案例:
public class InterfaceDemo1 {
public static void main(String[] args) {
//创建接口对象
DrillFire df = new DrillFire()://会直接报错
}
}
那么如何表示接口的实现呢?
使用多态的方式实现,有具体的子类进行实例化,其实这是多态的一种,叫做接口多态
接口的引用指向实现接口类的对象
案例:
//测试类
public class InterfaceDemo1 {
public static void main(String[] args) {
//接口的引用指向实现类的对象
DrillFire df = new TrainCat();
}
}
4、接口的子类
(1)如果子类是一个具体的类,必须要重写接口中所有抽象方法
案例:
//定义一个接口,表示钻火圈
interface DrillFire{
//创建一个没有具体实现的方法
public void zuanHuo();//编译的时候会自动默认加上abstract
}
//定义训练过的具体的猫类,实现钻火圈接口(关键字:implements)
class TrainCat implements DrillFire{
//子类是具体的类,要重写接口中所有抽象方法
@Override
public void zuanHuo() {
System.out.println("猫钻火圈");
}
}
(2)如果子类是一个抽象类,那么可以不需要重写接口中的方法
案例:
//定义一个接口,表示钻火圈
interface DrillFire{
//创建一个没有具体实现的方法
public void zuanHuo();//编译的时候会自动默认加上abstract
}
//定义一个抽象类来实现钻火圈接口
abstract class TrainCat66 implements DrillFire{
}
3、到目前为止,我们学过三种多态方式
1、具体类中的多态 (最后才是这个)
2、抽象类中的多态 (其次是抽象多态)
3、接口中的多态 (是最常见的,接口开发)
4、接口成员的特点
(1)成员变量:
只能是常量,并且是静态的(无法在测试类中二次赋值)
它里面给成员变量的默认修饰符是public static final
建议:手动全部补齐
//定义一个接口
interface Inter{
int a =10;
}
在编译的时候如下:
abstract interface Inter{ //自动加入了abstract
public static final int a =10;//自动加入了public static final
}
(2)构造方法:接口中没有构造方法
(3)成员方法:接口中的成员方法只能是抽象方法,没有方法体,连大括号都没有
它会自动补充修饰符:public abstract
建议:手动全部补齐
//定义一个接口
abstract interface Inter{
public void fun();
}
编译的时候如下:
abstract interface Inter{
public abstract void fun();//自动加入abstract
}
5、java中所有的类都默认继承一个类:Object
虽然接口中没有构造方法,但是多态初始化的时候要先初始化子类再初始化父类
这里其实继承了一个父类
java中所有的类都默认继承一个类:Object
每一个class都有Object作为超类
那么所有继承Object类的实现对象都实现了这个类中的方法

浙公网安备 33010602011771号