接口与实现

本文介绍了Java中的接口,包括接口的声明与实现方式。接口内包含常量和抽象方法,接口可被类通过implements关键字实现,并且一个类可以实现多个接口。接口不能实例化,但可通过接口回调实现方法调用。此外,文章讨论了接口与抽象类的区别,指出接口专注于定义行为,而抽象类则同时提供部分实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、接口

接口使用关键字interface来定义。接口和类相似,分为接口声明和接口体。

接口中只有常量和抽象方法

接口中定义常量始终使用的修饰符:public、static、final(允许省略)

接口中定义方法始终使用的修饰符:public、abstra(允许省略)

2、接口实现

接口由类使用关键字implements来实现。一个类可以实现多个接口(用逗号隔开接口名)例如:

class A implements B,C;

抽象类可以重写接口中的方法,也可以直接拥有接口中的方法。

接口可以实现多继承。

接口不能实例化。

public interface A {
    int max = 46;
    int f(int x);
}
public class B implements A {  //B类实现了接口A
    int number;

    @Override
    public int f(int x) {
        int sum = 0;
        for (int i = 1; i < x; i++){
            sum = sum + i;
        }
        return sum;
    }
}
public class C implements A {
    int number;

    @Override
    public int f(int x) {
        return max + x;  //直接使用接口中的常量
    }
}
public class Main {
    public static void main(String args[]){
        B b = new B();
        C c = new C();
        b.number = 32 + A.max;   //用接口名访问接口常量
        c.number = 14 + A.max;
        System.out.println(b.number);
        System.out.println(c.number);
        System.out.println(b.f(100));
        System.out.println(c.f(1));
    }
}

输出结果为:

E:\JavaIDE\jdk-9.0.4_windows-x64_bin\bin\java "-javaagent:E:\JavaIDE\Javaanzhuang\IntelliJ IDEA Community Edition 2017.3.3\lib\idea_rt.jar=3230:E:\JavaIDE\Javaanzhuang\IntelliJ IDEA Community Edition 2017.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\workplace\out\production\InstanceTest interface1.Main
78
60
4950
47

Process finished with exit code 0

由以上例子可以说明(1)程序可以使用接口名直接访问接口中的常量。

(2)如果一个类实现了接口,则可以再类体中直接使用接口的常量。

3、接口回调

由于接口不能实例化,所以当声明了一个接口变量的时候,如果想要调用接口方法,则需要将实现这个接口的类的对象的引用赋值给该接口变量,此时,接口变量就可以调用被类实现的接口方法。此时,就实现了接口的回调。

public interface A {
    void a(String s);
}
public class B implements A {
    @Override
    public void a(String s) {
        System.out.println(s);
    }
}
public class C {
    public static void main(String args[]){
        A a;  //声明接口变量
        a = new B();  //将对象的引用赋值给接口变量
        a.a("hello");  //接口回调
    }
}

输出结果为:

E:\JavaIDE\jdk-9.0.4_windows-x64_bin\bin\java "-javaagent:E:\JavaIDE\Javaanzhuang\IntelliJ IDEA Community Edition 2017.3.3\lib\idea_rt.jar=3236:E:\JavaIDE\Javaanzhuang\IntelliJ IDEA Community Edition 2017.3.3\bin" -Dfile.encoding=UTF-8 -classpath E:\workplace\out\production\InstanceTest CallBack.C
hello

Process finished with exit code 0

7、为什么有了接口还需要abstract类

(1)abstract类和接口都可以有abstract方法

(2)接口只能有常量,不能有变量;而abstract类既可以有常量,也可以有变量。

(3)abstract类中也可以有非abstract方法,接口不可以。

(4)abstract类可以提供了子类可以继承的变量和非abstract方法。如果考虑到需要使用继承一些变量和非abstract方法,就可以考虑使用abstract类。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值