Java接口——子接口是否能直接通过子接口名调用父接口类方法

Java9允许在接口中定义默认方法和类方法,为接口增加了一种私有方法,也可以提供实现。

接口就是定义一组通用的方法,就像U盘,只要是USB接口大部分都可以在电脑上使用,电脑无需关心U盘内部怎么实现,只需要告诉U盘厂商需要提供USB接口和一些对接方式即可。

接口里可以包含成员变量(只能静态成员变量)、方法(抽象实例方法、类方法、默认方法或私有方法)、内部类(包括内部接口、枚举)定义。

接口里定义的是多个类的共同的公共行为规范,定义接口的成员时只能用public访问权限或不写(默认就是public)

Java9为接口新增了一种新的私有方法,私有方法可以有方法体,主要作用就是工具方法,为接口中的默认方法和类方法提供支持。私有方法既可以是类方法,也可以是实例方法。

接口中的静态常量,它们是接口相关的,属于接口本身,所以默认有public static final修饰,且接口没构造器和初始化块,因此接口定义的成员变量只能在定义时指定默认值。

这两行代码结果完全一样。

    int MAX=600;
    public static final int MAX=600;

定义一个接口:

public interface Output {
    int MAX_CACHE_LINE = 50;
    
    void out();

    void getData(String msg);

    //默认方法
    default void print(String... messages) {
        for (String message : messages) {
            System.out.println(message);
        }
    }

    static String staticTest() {
        return "接口里的类方法";
    }

    private void foo() {
        System.out.println("foo私有方法");
    }

    private static void bar() {
        System.out.println("bar私有静态方法");
    }
}

默认方法并没有static修饰,因此不能直接用接口来调用默认方法,需要用接口实现类的实例对象来调用。

接口的默认方法其实就是实例方法,但是Java早期设计初衷:接口中的实例方法不能有方法体;Java8也不能直接推倒以前的规则,因此只好定义一个所谓的“默认方法”,其实就是有方法体的实例方法。

接口的继承

接口完全支持多继承,多个父接口排在extends关键字之后

接口继承的静态方法和静态常量问题:下面是一个类的继承:

class C {
    public static int cc = 10;

    public static void c() {
        System.out.println("ccc");
    }
}

class D extends C {
    public static void main(String[] args) throws NoSuchMethodException, NoSuchFieldException {
        System.out.println(D.class.getMethod("c"));
        System.out.println(D.class.getField("cc"));
    }
}

运行结果:

D类继承了C类后可以使用D的类名调用C类的静态方法和静态常量

下面是接口的继承:

interface A {
    public static final int a = 10;

    public static void aa() {
        System.out.println("刀哥");
    }
}

interface B extends A {
    public static void main(String[] args) throws NoSuchFieldException, NoSuchMethodException {
        System.out.println(B.class.getField("a"));
        System.out.println(B.class.getMethod("aa"));
    }
}

运行结果: 

 这说明了接口的继承是不可以通过子接口的接口名直接调用父接口的静态方法,只能通过父接口(接口名.静态方法名)来调用

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我是渣渣琛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值