当你可以做一个接口

时间:2018-06-07 10:59:56

标签: java class interface

我最近开始怀疑,为什么我会使用抽象类,当我可以只使用完全相同的功能进行界面时。请考虑以下事项:

abstract class abstractClass {

    public int a;

        public void printText(String str) {
        System.out.println(str);
    }
}

如果我有一个扩展它的子类,我肯定会有一个整数a和一个名为printText的方法。

interface Interface{

    public int a = 0;

    public default void printtext(String str) {
        System.out.println(str);
    }
}

如果我有一个类实现它,我肯定会有一个整数a和一个方法printText。

所以,我看到的唯一区别是,通过接口,我创建的任何类都可以实现我想要的其他接口,但是使用抽象类的扩展,我不会被允许扩展更多课程。我为什么要去抽象课?我希望这个问题不是太广泛,虽然我可以看到为什么有人会认为这个问题。

1 个答案:

答案 0 :(得分:1)

要考虑几点:

  1. 在Java 8之前,接口没有默认方法。

  2. 您界面中的a隐含final。接口无法定义公共可变字段。

  3. 接口无法定义私有(或受保护或包裹)字段。

  4. 接口不具备保护或封装方法;在Java 9之前,他们无法使用私有方法。

  5. 抽象类没有任何问题。因此,当您需要执行任何这些操作时(#1除外,现在存在默认方法),您可以使用抽象类(可能在添加中实现它所实现的接口)。