面向对象(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类的实现对象都实现了这个类中的方法
posted @ 2021-12-12 23:33  阿伟宝座  阅读(128)  评论(0)    收藏  举报