Java之接口

一、接口笔记

1.接口是什么?
一种公共的规范标准
2.接口的数据类型与名称格式?
引用数据类型,大驼峰
3.接口中抽象方法没有方法体,即不包含大括号
4.抽象方法的修饰符必须为固定的两个关键字 public abstract,可以选择性的省略
5.接口不能直接使用,必须要有一个实现类来实现该接口
public class 类名 implements 接口一,接口二
6.接口的实现类要覆盖重写接口中的所有抽象方法
7.对于在idea中,实现类快速实现接口中所有抽象方法:将光标放在实现类上,Alt + Enter 选择第一项,选择所有抽象方法,然后点击OK
8.关于Override?
(1)当做注释用,一般用于覆盖重写,方便阅读
(2)编译器可以帮助验证@Override下面的方法是否是父类或者接口中所有的,如果不是则报错。如果想重写父类中的某个方法,如果没写@Override,而下面的方法又写错了,有时编译器是可以通过的,因为编译器以为这个方法是你子类中自己曾加的方法。
9.实现类要实现接口的所有抽象方法,如果没有,就要将该实现类定义为抽象类型
10java8之后开始支持在接口中定义默认方法,好处在于:在接口升级的时候(升级:为接口添加新的方法),如果添加是抽象方法,则就要去为所有实现该接口的类去添加新的抽象方法的重写覆盖,否则那些类就无法使用了。
11.接口中的默认方法会被实现类继承,也可以被实现类覆盖重写,实现类的对象可以直接调用,优先在当前类中寻找是否存在该方法。
12.java8开始支持接口中添加静态方法,就是可以共享的部分。
13.静态方法的使用一般为类名.静态方法直接完成调用,在接口中的使用方法为:接口名.静态方法。不能通过实现类的对象来调用接口中的静态方法
14.从java9开始,接口中允许定义私有方法。分为两种:
普通私有方法(针对java8的默认方法):解决多个默认方法之间重复代码的问题
private 返回值类型 方法名(参数列表)
静态私有方法:(针对java8的静态方法):解决多个静态方法之间重复代码的问题
private static 返回值类型 方法名(参数列表)
15.对于接口中的常量
定义格式:public static final 数据类型 常量名 = 常量值;
关键字说明:static -> 与对象无关、final -> 不能改变
命名规则:采用完全大写的命名规则,多个单词之间使用下划线连接


 

---------------------------------------------------------------------------------------------------------------------------------

在java9+版本中,接口的内容:(小结)
1.成员变量实际为常量
[public] [static] [final] 数据类型 常量名称 = 常量值;
注意:常量必须进行赋值,而且一但赋值后不能再改变;常量名完全大写,用下划线分隔
2.接口中最重要的是抽象方法
[public] [abstract] 返回值类型  方法名称(参数列表) {方法体}
注意:实现类要实现接口的所有抽象方法,除非为抽象类
3.从java8开始,接口中允许定义默认方法和静态方法
默认方法:
(1)格式:[public] default 方法名称(参数列表){方法体}
注意:默认方法被实现类继承,可以由实现类的对象直接调用,也可以在实现类中覆盖重写
(2)格式:[public] static 返回值类型 方法名(参数列表){方法体}
注意:静态方法只能通过接口名.方法调用,不能通过实现类对象调用
4.从java9开始,接口中允许定义私有方法:
(1)普通私有方法:private 返回值类型 方法名称(参数列表){方法体}
(2)静态私有方法:private static 返回值类型 方法名称(参数列表){方法体}
注意:private方法只有接口自己能使用,不能被外部调用

---------------------------------------------------------------------------------------------------------------------------------

二、代码部分

PS:一些知识点放在了代码段的注释里:

接口一:

package com.Coding.JavaSE.Demo2;

public interface MyInterfaceAbstract {
    //抽象方法的定义
    public abstract void methodAbs1();
    public void methodAbs2();
    abstract void methodAbs3();
    void methodAbs4();
    //对于方法三要素:返回值、方法名、参数列表 的选取可根据具体情况来定
    //但对于关键字只能为 public abstract,可以选择性省略

    //默认方法的定义
    public default void methodDefault(){
        System.out.println("接口中的静态方法!");
    }

    //静态方法的定义
    public static void methodStatic(){
        System.out.println("接口中的静态方法!");

    //私有方法的定义 因为java9才能使用,但此时我使用的是java8 所以这部分只能注释起来
/*    private void methodPDefault(){
            System.out.println("接口中的普通私有方法!");
        }

    private static void methodPStatic(){
            System.out.println("接口中的静态私有方法!");
        }

 */
    }
}

接口二:(为了实现多个接口)

package com.Coding.JavaSE.Demo2;

public interface MyInterfaceAbstract01 {
    //定义一个常量
    public static final int NUMBER = 99;

    //定义一个抽象方法
    public abstract void happyNess();

}

实现类:

package com.Coding.JavaSE.Demo2;
/*
对于接口的定义与使用测试
1.接口的定义:
public interface 接口名{
  //接口内容
}
大驼峰命名 重点在于接口中的抽象方法
java7接口中可以包括常量、抽象方法 java8可以额外包含默认方法、静态方法 java9还额外包括私有方法
*/

import com.sun.javaws.IconUtil;

/*
实现接口:并完成对象的创建
1.不能直接创建接口的对象,要创建实现类的对象,然后调用覆盖后的抽象方法
2.实现类要覆盖重写接口中的所有抽象方法,如果并没有实现接口的所有方法
则该实现类要设计为抽象类,属于一种继承关系,由继承它的某个子类来实现剩余的抽象方法

从java8开始,支持接口中写默认方法(默认长发可以写方法体)
1.默认方法的定义
public default void 方法名(参数列表){方法体}  public可以省略不写,但default不能省略
2.接口中的默认方法可以解决接口升级的问题(升级:接口中添加新的方法)
3.默认方法会被接口的抽象函数继承下去的,可以由接口的实现类的对象直接调用,也可以被实现类覆盖
重写,在实现类调用的时候,有限在当前类中寻找是否有该方法

从java8开始,支持接口中定义静态方法(static 意为共享)
1.静态方法的定义
public static 返回值类型 方法名称(参数列表){方法体}
2.不能通过接口实现类的对象来调用接口中的静态方法,应该通过接口名称.静态方法直接完成调用

从java9开始,接口中允许定义私有方法
1.私有方法的两种类型:
(1)普通私有方法:解决多个默认方法之间重复代码问题
    private 返回值类型 方法名称(参数列表)
(2)静态私有方法:解决多个静态方法之间重复代码问题
    private static 返回值类型 方法名(参数列表)
2.出现私有方法的原因:为了解决接口中代码块重复问题,如果再定义一个默认方法来存储接口中其
它默认方法的公共部分,则在接口的实现类对象也可以直接调用这个公共部分的默认方法,但开发者
只想让该接口中的方法使用该公共部分的方法,所以就产生了私有方法
3.接口中也可以定义”成员变量“,因为这个变量是静态的,所以可以理解为常量
(1)常量的定义格式: public static final 数据类型 常量名称 = 数据值
    可以省略public、static、final,但是不能省略初始化(接口中的常量一定要赋值)
(2)调用方式: 接口名称.常量()
(3)两个关键字:
    使用static关键字,说明与对象无关
    使用final关键字,说明不能改变
(4)命名规则:常量名使用完全大写的命名规则,如果有多个单词组成,这几个单词之间使用下划线连接

零零散散
1.接口中没有静态代码块,也没有静态方法
2.一个类只能继承一个类,但能实现多个接口
3.对于多个接口中存在相同抽象方法时,在实现类只需要实现一次即可
4.在实现类中要覆盖重写所有抽象方法,否则只能为抽象类
5.有冲突的默认方法一定要覆盖重写
6.如果实现类的父类方法与接口方法出现了冲突:会自动选择有点父类(Java中继承优先于接口实现)

接口之间的多继承
1.格式:public interface 接口子 extends 接口A, 接口B, ...
2.(1)多个父接口的抽象方法重复没有关系,因为没有方法体
  (2)多个父接口的默认方法出现重复,子接口一定要将该默认方法覆盖重写,而且不能省略default
 */
public class DemoInterface implements MyInterfaceAbstract, MyInterfaceAbstract01{

    @Override
    public void methodAbs1() {
        System.out.println("小艺小艺,XX是谁儿子?");
    }

    @Override
    public void methodAbs2() {
        System.out.println("亲爱的主人,XX是您儿子呀!");
    }

    @Override
    public void methodAbs3() {
        System.out.println("小艺小艺,那他的外号叫什么?");
    }

    @Override
    public void methodAbs4() {
        System.out.println("嘿嘿,是狗ji呀!");
    }
    @Override
    public void happyNess() {
        System.out.println("第二个接口的抽象方法!");
    }


    public static void main(String[] args) {
        //创建实现类的对象
        DemoInterface imp = new DemoInterface();
        //调用覆盖后的方法
        imp.methodAbs1();
        imp.methodAbs2();
        imp.methodAbs3();
        imp.methodAbs4();

        imp.happyNess();
        //调用接口中的默认方法
        imp.methodDefault();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bow.贾斯汀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值