面试题: 接口和抽象类的区别?

接口:

解释:标准、规范

生活层面:
        usb接口:
        计算机厂商:将计算机上多准备几个usb口,就可以让更多的设计连接上计算机
        外接设备厂商:设计厂商如果想要让其设备通过usb口连接上计算机,那么它就需要对usb接口的驱动进行实现

java层面:
        举例:
        我们之后会学习java连接数据库的技术 ==> jdbc

        jdbc就是一组java操作数据库的接口

        有如下一些常用的:
        Connection接口(获取数据库连接)、Statement接口(操作sql语句)、ResultSet接口(处理结果集)...
            
        市面主流的关系型数据库:Oracle、Mysql、Sql Server、db2...

        如果上述的数据库厂商想要让我的java产品能够连接上你,数据库厂商必须自己先去对以后jdbc中所有的接口进行规范实现


讲点听得懂的:

        如果多个类不是继承关系,也不在同一个继承体系中,
        但是它们的内容都想定义相同的功能(方法),我们就可以将此方法定义到接口中,
        让这多个类实现接口即可;

举例:
    类                                  接口                方法
    Kite、Plane、Bird        FlyAble            抽象 fly()


接口的定义:
    不再是class,而是interface

    格式:
        interface 接口名{
            //...
        }


接口中可以定义的成员:

java8以前:
    接口中只能定义常量和抽象方法

    常量:
        格式:
                public static final 数据类型 常量名 = 常量值;

            简化形式:

                数据类型 常量名 = 常量值;

        常量也是标识符之一,满足规则和规范;

        规范如下:
            所有字母全部大写,如果是多个单词组成,每个单词中间使用下划线间隔

        举例:
            HELLO_WORLD_JAVA


    抽象方法:
        格式:
                public abstract 返回值类型 方法名(形参列表);

            简化形式:
                
                返回值类型 方法名(形参列表);


接口定义完成,就是为了给类实现的(接口存在的意义)
类实现接口:

    关键字:implements

    格式:
        class 类名 implements 接口名{
            //...
        }

    【注意】:
        类实现接口需要重写接口中所有的抽象方法,否则这个类也必须定义为抽象类

【注意事项】:
    1).接口的定义需要使用interface,而不再是class
    2).接口存在的意义就是为了给类所实现的,类实现接口使用implements关键字
    3).类实现了接口,这个类我们成为接口的实现类
    4).接口不能被实例化对象,它没有构造方法
    5).接口存在多态性的体现:
            接口类型的引用 指向 实现类的对象
    6).前提已经发生了多态,如果想要使用实现类中独有的成员,
       我们必须先对其进行强制向下转型,需要配合instanceof关键字实现
    7).java中类和类之间只能满足单一继承,
    8).java中接口和接口之间可以满足多继承
    9).java中一个类可以实现多个接口
    10).java中将一个类在继承父类的同时可以实现多个接口,
        这样做的目的将类中的功能最大化


java8以后:
    接口中可以定义静态方法和默认方法

    静态方法:
        格式:
            public static 返回值类型 方法名(形参列表){
                //...
            }

    默认方法:
        格式:
            public default 返回值类型 方法名(形参列表){
                //...
            }


注意事项:
    1).静态方法的调用不能实现实现类对象,只能通过接口名
    2).父类和接口中定义了相同名字的方法,子类/实现类对象调用该方法,默认调用的是父类中的(类优先原则),
       如果想要调用的是接口中的方法,那么我们需要对其进行重写,显示对其进行调用
    3).多个接口中定义了相同名字的默认方法,类同时实现这多个接口,
       必须显示的对该默认方法进行重写,解决该接口冲突问题


思考:
    为什么java8新特性中需要加入默认方法?

    我们之后到企业进行开发,做的项目会进行版本的升级和迭代;
    如果在升级的过程中,对于某个接口中的方法需要追加,
    如果只能定义抽象方法,那么之前实现该接口的类全部都会顿时报错!
    此时引入了默认方法,之前实现该接口的类都不会报错,
    只需要将部分需要使用到新方法的类进行方法的重写即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值