接口的定义和使用

接口是一个额外的功能,实现接口就具备该功能,不实现就不具备

接口:是引用数据类型的一种,是功能的集合(接口中一般定义的都是方法)
    接口中不能定义变量,只能定义常量(很少使用)
定义接口使用也是.java文件;编译生成.class文件
定义接口使用关键字 interface
定义格式:
    修饰符 interface 接口名{
        抽象方法;(JDK7) 重点
        默认方法;(JDK8)    
        静态方法;(JDK8)
        常量(很少使用)
    }

定义使用含有抽象方法的接口


抽象方法的定义格式:
        修饰符 abstract 返回值类型 方法名(参数列表);
    注意:
        [接口中]的抽象方法的修饰符固定就是public abstract,可以省略不写,也可以写一部分
        建议全部写出,提高阅读性
        public abstract 返回值类型 方法名(参数列表);
        public  返回值类型 方法名(参数列表);
        abstract 返回值类型 方法名(参数列表);
        返回值类型 方法名(参数列表);
    接口的使用:
        1.接口和抽象类一样,也无法创建对象使用
        2.可以定义一个实现类,实现接口,重写接口中所有的抽象方法,创建实现类对象使用

 实现类:类似于继承(类实现接口之后,也会继承接口中所有的方法)
    实现使用关键字:implements
    格式:
        public class 实现类名 implements 接口{
            重写接口中所有的抽象方法;
        }
    工作中实现类名书写规范:
        接口名Impl==>见名知意

定义使用含有默认方法的接口


/*

默认方法定义格式:
        修饰符 default 返回值类型 方法名(形式参数列表){
            方法体;
        }
    注意:
        默认方法的关键字default不能省略的
 */
/*
    实现类实现接口:可以选择性的重写默认方法
        实现类没有重写默认方法,使用继承自接口的默认方法
        实现类重写了默认方法,使用重写后的方法
    注意:
        实现类重写默认方法,去掉default关键字
    重写方法的快捷键:ctrl+o
 */

定义使用含有静态方法的接口


/*
    定义使用含有静态方法的接口
    静态方法定义格式:
        修饰符 static 返回值类型 方法名(形式参数列表){
            方法体;
        }
    注意:
        静态方法的关键字static不能省略的
 */
/*
    含有静态方法的接口,静态方法属于接口本身,可以通过接口名,直接使用
    实现类即不能继承静态方法,也不能重写静态方法(废物类)
 */

//通过接口名,直接使用静态方法

注意:

接口中的静态方法不能继承使用,也不能重写

类中的静态方法可以继承使用,不能重写

类继承类的同时实现多个接口


/*
    类继承类的同时实现多个接口(重点)
    一个人只能有一个亲爹(父类),但是可以有多个干爹(接口)
    格式:
        public class 子类 extends 父类 implements 接口1,接口2,...{
            重写父类和接口中所有的抽象方法
            选择性的重写父类的普通方法|接口中的默认方法
        }
    注意:
        父类的普通方法和接口的默认方法相同,子类使用父类的方法
 */

接口的多继承


接口与接口之间:继承关系

package com.itheima.demo13interface;

public interface A {
    public abstract void a();
    public abstract void show();

    public default void show01(){
        System.out.println("A接口的默认show01方法");
    }

    public default void show02(){
        System.out.println("A接口的默认show02方法");
    }
}
package com.itheima.demo13interface;

public interface B {
    public abstract void b();
    public abstract void show();

    public default void show02(){
        System.out.println("B接口的默认show02方法");
    }
}
package com.itheima.demo13interface;

/*
    1.类与类之间:继承关系(单继承)
        public class 子类 extends 父类{ }
    2.类与接口之间:实现关系(多实现)
        public class 实现类 implements 接口1,接口2,接口3...{}
    3.接口与接口之间:继承关系(多继承)
        public interface 子接口 extends 父接口1,父接口2...{}
    注意:
        多个父接口中有相同的默认方法,子接口必须重写默认方法,使用子接口自己重写后的
        不重写相同的默认方法,有不确定性,不确定使用哪个父接口的
 */
public interface C extends A,B{
    @Override
    public default void show02() {
        System.out.println("C接口重写A接口和B接口重复的show02方法!");
    }
}
package com.itheima.demo13interface;

/*
    使用实现类实现了C接口,相当于同时实现了ABC三个接口
    需要重写三个接口中所有的抽象方法
 */
public class ABCImpl implements C{
    @Override
    public void a() {
        System.out.println("实现类重写了A接口中的a方法");
    }

    @Override
    public void b() {
        System.out.println("实现类重写了B接口中的b方法");
    }

    @Override
    public void show() {
        System.out.println("实现类重写了A接口和B接口中的show方法");
    }
}
package com.itheima.demo13interface;

public class Demo01 {
    public static void main(String[] args) {
        ABCImpl abc = new ABCImpl();
        abc.a();//实现类重写了A接口中的a方法
        abc.b();//实现类重写了B接口中的b方法
        abc.show();//实现类重写了A接口和B接口中的show方法
        abc.show01();//A接口的默认show01方法
        abc.show02();//C接口重写A接口和B接口重复的show02方法!
    }
}

接口中其他成员的特点

1.接口中,无法定义成员变量,但是可以定义常量,其值不可以改变, 接口中常量默认使用public static final修饰

接口中的常量修饰符可以省略不写.不写默认也是public static final

​ 常量的命名规则:所有的单词都要大写,多个单词之间可以使用下划线连接 ​ AAA_BBB_CCC ​ 定义一些常用的常量: ​

公司的名称:"江苏省传智播客股份有限公司北京分公司" ​

公司的网址: "www.itcast.cn" "www.itheima.com" ​

公司的地址: 北京市顺义区京顺路99号黑马程序员

2.接口中,没有构造方法,不能创建对象。

3.接口中,没有静态代码块

package com.itheima.demo14interface;

/*
    接口中其他成员的特点(使用)
    定义一些常用的常量:
    公司的名称:"江苏省传智播客股份有限公司北京分公司"
    公司的网址: "www.itcast.cn"  "www.itheima.com"
    公司的地址: 北京市昌平区金燕龙办公楼黑马程序员
 */
public interface MyInter {
    public static final String NAME = "江苏省传智播客股份有限公司北京分公司";
    public static final String WEB = "www.itheima.com";
    String ADDRESS = "北京市昌平区金燕龙办公楼黑马程序员";
}
package com.itheima.demo14interface;

public class Demo01 {
    public static void main(String[] args) {
        //接口中的常量,通过接口名可以直接使用
        System.out.println(MyInter.NAME);
        System.out.println(MyInter.WEB);
        System.out.println(MyInter.ADDRESS);
        //Cannot assign a value to final variable 'WEB' 常量的值不能改变
        //MyInter.WEB = "www.itcast.cn";
        System.out.println(Math.PI);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

旭子在努力

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

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

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

打赏作者

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

抵扣说明:

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

余额充值